鱼C论坛

 找回密码
 立即注册
查看: 4630|回复: 16

[已解决]有关模拟生成微软序列号求解和讲解

[复制链接]
发表于 2020-3-29 17:47:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求解和讲解
最佳答案
2020-3-29 23:40:17
知道代码,改了一下反推种子数:
  1. import random

  2. def key(num):
  3.     for _ in range(num):
  4.         keySn = []
  5.         for i in range(5):
  6.             s = ''
  7.             characters = 'BCEFGHJKMPQRTVWXY2346789'
  8.             for i in range(5):
  9.                 s = s + random.choice(characters)
  10.             keySn.append(s)
  11.         key = '-'.join(keySn)
  12.         if key[:5]=='RMY9C':
  13.             print(n,key)


  14. if __name__ == '__main__':
  15.     num = 1
  16.     for n in range(100000000):    #先测到1亿看看
  17.         if n%1000000==0:     #每百万打印一下,好知道程序在跑
  18.             print(n)
  19.         random.seed(n))
  20.         key(num)
复制代码

得到这些:
1853826 RMY9C-WB794-6VEVX-TQP4E-XPECB
2272267 RMY9C-GCYPW-CGKBC-3GQJP-V3WHE
17242826 RMY9C-ERJYV-QGJ8R-79HCM-72GEB
20629002 RMY9C-Q2R73-9BPVK-7XV38-CYY2F
24629929 RMY9C-YXGFK-JKFT4-FX2BH-WKPKR
61168388 RMY9C-CMBHG-9G78Q-KHBBG-Y2E34
63851621 RMY9C-GK3QQ-G6QTR-FQBWV-8YBVQ
68897327 RMY9C-RFPQ9-XQF4P-FWQQE-27PEK
81383307 RMY9C-3KMPY-6VVGQ-68HGM-MH6VC
87790333 RMY9C-C9H2X-944K6-M83B4-KWV29
93063340 RMY9C-FE2FV-PF479-FEVJ8-Y62JK
都不对,难道输入了9位以上的种子数?感觉有点BT啊!再分析源码,原来'n = input()',种子不是整数而是字符,改一下:
  1. import random

  2. def key(num):
  3.     for _ in range(num):
  4.         keySn = []
  5.         for i in range(5):
  6.             s = ''
  7.             characters = 'BCEFGHJKMPQRTVWXY2346789'
  8.             for i in range(5):
  9.                 s = s + random.choice(characters)
  10.             keySn.append(s)
  11.         key = '-'.join(keySn)
  12.         if key[:5]=='RMY9C':
  13.             print(n,key)


  14. if __name__ == '__main__':
  15.     num = 1
  16.     for n in range(100000000):
  17.         if n%1000000==0:
  18.             print(n)
  19.         random.seed(str(n))
  20.         key(num)

复制代码

一运行就有了:
5 RMY9C-YKW36-F342B-JKG6F-X7Y78
原来是字符'5',改一下自己的代码:
  1. import random as r
  2. a=int(input('请输入个数:'))
  3. b=input('请输入随机数种子:')
  4. char='BCEFGHJKMPQRTVWXY2346789'
  5. r.seed(b)               #生成随机数种子
  6. for i in range(a):      #需要多少个,循环多少次
  7.     sn=''
  8.     for j in range(25):          #序列号25位
  9.         if j%5==0 and j//5>0:    #每5个字符加一个'-'
  10.             sn+='-'
  11.         sn+=r.choice(char)       #随机选取字符
  12.     print(sn)
复制代码

运行:
  1. 请输入个数:3
  2. 请输入随机数种子:5
  3. RMY9C-YKW36-F342B-JKG6F-X7Y78
  4. 8GVK8-3KTFQ-X2H68-H9VEG-33VR8
  5. PFXCH-283JE-FVG2B-9GWHB-H9679
复制代码

是你要的结果吧?感觉出题的老师真有点BT,还是你理解错误题目?
QQ图片20200329174622.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-29 18:06:54 | 显示全部楼层
  1. import random as r
  2. a=int(input('请输入个数:'))
  3. b=int(input('请输入随机数种子:'))
  4. char='BCEFGHJKMPQRTVWXY2346789'
  5. r.seed(b)               #生成随机数种子
  6. for i in range(a):      #需要多少个,循环多少次
  7.     sn=''
  8.     for j in range(25):          #序列号25位
  9.         if j%5==0 and j//5>0:    #每5个字符加一个'-'
  10.             sn+='-'
  11.         sn+=r.choice(char)       #随机选取字符
  12.     print(sn)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-29 18:13:14 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-29 19:00:08 | 显示全部楼层
本帖最后由 ba21 于 2020-3-29 19:04 编辑
  1. import random

  2. def makeSn():
  3.     s = 'BCEFGHJKMPQRTVWXY2346789'

  4.     sn = ''
  5.     for n in range(1, 30):
  6.         sn +=  '-' if n%6 == 0 else random.choice(s)
  7.             
  8.     return sn

  9. num = int(input('个数:'))
  10. seed = int(input('随机种子:'))
  11. random.seed(seed)

  12. for i in range(0, num):   
  13.     print(makeSn())
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-29 19:15:23 | 显示全部楼层

import random

def key(num):
    for _ in range(num):
        keySn = []
        for i in range(5):
            s = ''
            characters = 'BCEFGHJKMPQRTVWXY2346789'
            for i in range(5):
                s = s + random.choice(characters)
            keySn.append(s)
        key = '-'.join(keySn)
        print(key)


if __name__ == '__main__':
    num = int(input())
    n = input()
    random.seed(n)
    key(num)   我就搞不懂为什么答案就是这个出来的答案必须是RMY9C-YKW36-F342B-JKG6F-X7Y78
8GVK8-3KTFQ-X2H68-H9VEG-33VR8
PFXCH-283JE-FVG2B-9GWHB-H9679
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-29 19:22:39 | 显示全部楼层
李子豪 发表于 2020-3-29 19:15
import random

def key(num):

使用random.seed(n)后,每次生成的序号都是一样的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-29 19:28:53 | 显示全部楼层
ba21 发表于 2020-3-29 19:22
使用random.seed(n)后,每次生成的序号都是一样的。

我想要每次生成的序号都是RMY9C-YKW36-F342B-JKG6F-X7Y78
8GVK8-3KTFQ-X2H68-H9VEG-33VR8
PFXCH-283JE-FVG2B-9GWHB-H9679
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-29 19:29:33 | 显示全部楼层
李子豪 发表于 2020-3-29 19:28
我想要每次生成的序号都是RMY9C-YKW36-F342B-JKG6F-X7Y78
8GVK8-3KTFQ-X2H68-H9VEG-33VR8
PFXCH-283JE- ...

怎么办?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-29 21:12:07 | 显示全部楼层
李子豪 发表于 2020-3-29 19:28
我想要每次生成的序号都是RMY9C-YKW36-F342B-JKG6F-X7Y78
8GVK8-3KTFQ-X2H68-H9VEG-33VR8
PFXCH-283JE- ...

你想每次都一样,保证每次的种子数一样就可以了,但是你想生成你指定的序列号,你需要知道两样,一是算法,二是正确的种子数,或者干脆把你要的序列号写入代码。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-29 21:28:51 | 显示全部楼层
李子豪 发表于 2020-3-29 19:28
我想要每次生成的序号都是RMY9C-YKW36-F342B-JKG6F-X7Y78
8GVK8-3KTFQ-X2H68-H9VEG-33VR8
PFXCH-283JE- ...

你这人好怪,不是给你说了你给他什么样的种子他就生成什么样的号。
你要得到这个 RMY9C-YKW36-F342B-JKG6F-X7Y78 你看示例代码给的种子是多少不就成了,他给什么种子你就给什么种子不就一样了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-29 22:08:42 | 显示全部楼层
李子豪 发表于 2020-3-29 19:15
import random

def key(num):

是这里的代码?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-29 23:40:17 | 显示全部楼层    本楼为最佳答案   
知道代码,改了一下反推种子数:
  1. import random

  2. def key(num):
  3.     for _ in range(num):
  4.         keySn = []
  5.         for i in range(5):
  6.             s = ''
  7.             characters = 'BCEFGHJKMPQRTVWXY2346789'
  8.             for i in range(5):
  9.                 s = s + random.choice(characters)
  10.             keySn.append(s)
  11.         key = '-'.join(keySn)
  12.         if key[:5]=='RMY9C':
  13.             print(n,key)


  14. if __name__ == '__main__':
  15.     num = 1
  16.     for n in range(100000000):    #先测到1亿看看
  17.         if n%1000000==0:     #每百万打印一下,好知道程序在跑
  18.             print(n)
  19.         random.seed(n))
  20.         key(num)
复制代码

得到这些:
1853826 RMY9C-WB794-6VEVX-TQP4E-XPECB
2272267 RMY9C-GCYPW-CGKBC-3GQJP-V3WHE
17242826 RMY9C-ERJYV-QGJ8R-79HCM-72GEB
20629002 RMY9C-Q2R73-9BPVK-7XV38-CYY2F
24629929 RMY9C-YXGFK-JKFT4-FX2BH-WKPKR
61168388 RMY9C-CMBHG-9G78Q-KHBBG-Y2E34
63851621 RMY9C-GK3QQ-G6QTR-FQBWV-8YBVQ
68897327 RMY9C-RFPQ9-XQF4P-FWQQE-27PEK
81383307 RMY9C-3KMPY-6VVGQ-68HGM-MH6VC
87790333 RMY9C-C9H2X-944K6-M83B4-KWV29
93063340 RMY9C-FE2FV-PF479-FEVJ8-Y62JK
都不对,难道输入了9位以上的种子数?感觉有点BT啊!再分析源码,原来'n = input()',种子不是整数而是字符,改一下:
  1. import random

  2. def key(num):
  3.     for _ in range(num):
  4.         keySn = []
  5.         for i in range(5):
  6.             s = ''
  7.             characters = 'BCEFGHJKMPQRTVWXY2346789'
  8.             for i in range(5):
  9.                 s = s + random.choice(characters)
  10.             keySn.append(s)
  11.         key = '-'.join(keySn)
  12.         if key[:5]=='RMY9C':
  13.             print(n,key)


  14. if __name__ == '__main__':
  15.     num = 1
  16.     for n in range(100000000):
  17.         if n%1000000==0:
  18.             print(n)
  19.         random.seed(str(n))
  20.         key(num)

复制代码

一运行就有了:
5 RMY9C-YKW36-F342B-JKG6F-X7Y78
原来是字符'5',改一下自己的代码:
  1. import random as r
  2. a=int(input('请输入个数:'))
  3. b=input('请输入随机数种子:')
  4. char='BCEFGHJKMPQRTVWXY2346789'
  5. r.seed(b)               #生成随机数种子
  6. for i in range(a):      #需要多少个,循环多少次
  7.     sn=''
  8.     for j in range(25):          #序列号25位
  9.         if j%5==0 and j//5>0:    #每5个字符加一个'-'
  10.             sn+='-'
  11.         sn+=r.choice(char)       #随机选取字符
  12.     print(sn)
复制代码

运行:
  1. 请输入个数:3
  2. 请输入随机数种子:5
  3. RMY9C-YKW36-F342B-JKG6F-X7Y78
  4. 8GVK8-3KTFQ-X2H68-H9VEG-33VR8
  5. PFXCH-283JE-FVG2B-9GWHB-H9679
复制代码

是你要的结果吧?感觉出题的老师真有点BT,还是你理解错误题目?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-30 10:09:50 From FishC Mobile | 显示全部楼层
用这玩意伪装产品密匙?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-30 10:19:06 | 显示全部楼层
txxcat 发表于 2020-3-29 23:40
知道代码,改了一下反推种子数:

得到这些:

感谢感谢这次对了但我懵了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-30 11:11:04 | 显示全部楼层
李子豪 发表于 2020-3-30 10:19
感谢感谢这次对了但我懵了

有问题继续问
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-31 12:17:08 | 显示全部楼层

我从我老师的答案怎么看的出来是字符5啊?不是整数5???
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-31 13:43:26 From FishC Mobile | 显示全部楼层
input输出的都是字符串,需要整数的话需要通过int来转换,你可以在源码中看到输入次数用了int转换,种子数没有,满满的坑呀,不留意就掉进去了:(
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-9 15:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表