.:. 草榴社區 » 技術討論區 » 带有多种掩码规则的邀请码-探索与优化
--> 本頁主題: 带有多种掩码规则的邀请码-探索与优化 字體大小 寬屏顯示 只看樓主 最新點評 熱門評論 時間順序
爱自由


級別:聖騎士 ( 11 )
發帖:552
威望:104 點
金錢:44152 USD
貢獻:25000 點
註冊:2015-03-27


带有多种掩码规则的邀请码-探索与优化



众所周知,社区是需要邀请注册的,也就是聚聚生成邀请码,来分享给未注册的朋友使用。但是很多时候,聚聚分享出来的邀请码都是带有掩码的,
例如 abcde*abc*a*a*12 这种形式。同时,星号 * 可能代表任意字母或数字。
引用

感谢 聚聚@夜游宫 提醒
字母只会是abcdef中的,其他20个字母不会出现在邀请码里面的。(新人朋友一定要知道这一点,不然尝试隐藏邀请码时,会浪费时间做很多无用功)

接下来,我们尝试通过代码来揭示掩码背后可能存在的真实邀请码。
首先,让我们进行简单的分析。任意的字母或数字可以表示为 "abcdef0123456789" ,长度为 16。
假设有 4 位掩码,共有 16x16x16x16 = 65,536 种组合。

聪明的朋友可能会想到使用递归来遍历每一位来生成真实邀请码,具体实现如下:

複製代碼
  1. str_mask = "cp2iv*qpz*y*q*12"
  2. def generate_real_codes():
  3.     real_codes = []
  4.     mask_length = len(str_mask)
  5.     def generate_codes_helper(current_code, index):
  6.         if index == mask_length:
  7.             real_codes.append(current_code)
  8.             return
  9.         if str_mask[index] == '*':
  10.             for char in "abcdef0123456789":
  11.                 generate_codes_helper(current_code + char, index + 1)
  12.         else:
  13.             generate_codes_helper(current_code + str_mask[index], index + 1)
  14.     generate_codes_helper('', 0)
  15.     print(len(real_codes))  # 输出:65,536
  16.     return real_codes
複製代碼


然后,我们可以进一步优化。下面是一个更高效的方法:

複製代碼
  1. from itertools import product
  2. def generate_real_codes_v2():
  3.     real_codes = []
  4.     possible_chars = []
  5.     for ch in str_mask:
  6.         if ch == '*':
  7.             possible_chars.append("abcdef0123456789")
  8.         else:
  9.             possible_chars.append(ch)
  10.     for code in product(*possible_chars):
  11.         real_codes.append(''.join(code))
  12.     print(len(real_codes))  # 输出:65,536
  13.     return real_codes
複製代碼


可以看到,这段改进后的代码速度提高了一倍。改进后的代码之所以更高效,主要有以下几个原因:
1. 使用了 itertools.product 函数:在改进后的代码中,我们利用了 itertools.product() 函数,它能够生成多个可迭代对象的笛卡尔积,避免了嵌套循环的使用,简化了代码结构,提高了性能。
2. 减少了字符串拼接次数:将字符串拼接操作集中在生成完所有解码结果后进行,减少了字符串拼接的次数,提高了效率。

综上所述,通过优化字符集构建、使用 itertools.product() 函数以及减少字符串拼接次数,改进后的代码在生成所有实际邀请码的过程中更加高效。这使得我们能够更快地处理包含多种掩码规则的字符串,节省时间和资源。


然而,还有一个问题需要解决。
因为有些同学可能比较皮, 掩码很个性, 比如这种 “cp2iv★qpz★y★q*12”
而且这个同学还说 ★ 是随机数字, 而 * 是随机字母+数字.
因为我们脚本需要稍作优化.需要把具体的匹配规则抽出来, 当成可以配置变更的,如下:

複製代碼
  1. mask_rule = {
  2.     '*': "abcdef0123456789",
  3.     '★': "0123456789",
  4. }
  5. def generate_real_codes_v2_plu():
  6.     invite_codes = []
  7.     possible_chars = []
  8.     for ch in str_mask:
  9.         if ch in list(mask_rule.keys()):
  10.             possible_chars.append(mask_rule.get(ch))
  11.         else:
  12.             possible_chars.append(ch)
  13.     for code in product(*possible_chars):
  14.         invite_codes.append(''.join(code))
  15.     return invite_codes
複製代碼



至此,看似写完了, 然而,还有一个问题需要解决。如果掩码的位数足够大,生成的邀请码数量也会非常庞大,将它们全部存储在列表中可能会消耗大量内存。
为了避免这个问题,我们可以使用生成器(generator),逐个生成邀请码,而不是一次性生成所有代码并存储在内存中。这就像是一种懒加载的方式。

下面是使用生成器进行优化的代码:

複製代碼
  1. def generate_real_codes_v2_plu_plu():
  2.     possible_chars = []
  3.     for ch in str_mask:
  4.         if ch in mask_rule:
  5.             possible_chars.append(mask_rule[ch])
  6.         else:
  7.             possible_chars.append(ch)
  8.     for code in product(*possible_chars):
  9.         yield ''.join(code)
複製代碼

生成器对象本身并不直接支持获取长度,因为生成器是一种惰性计算的机制,它并不实际生成所有的元素。
所以可以直接用掩码位数与每个掩码可能出现的字符数的乘积来计算结果
16x16x16x16 = 65,536

至此,我们的代码基本完成了优化和修复。

最后: 祝各位看帖的新人,早日上岸~!


[ 此貼被爱自由在2023-08-11 18:12重新編輯 ]

赞(30)
DMCA / ABUSE REPORT | TOP Posted: 08-11 17:49 樓主 引用 | 發表評論
夜游宫


級別:天使 ( 14 )
發帖:84734
威望:132163 點
金錢:7156 USD
貢獻:21 點
註冊:2020-02-08
認證: 博彩區資深老幹部
2021-07-09


邀请码的本质是16进制的数字。
是10个阿拉伯数字+6个字母组合而成。

字母只会是abcdef中的,其他20个字母不会出现在邀请码里面的。(新人朋友一定要知道这一点,不然尝试隐藏邀请码时,会浪费时间做很多无用功)
------------------------
🐁 🐂 🐅 🐇 🐉 🐍 🐎 🐑 🐒 🐔 🐕 🐖


點評

    TOP Posted: 08-11 18:00 熱門評論 引用 | 點評
    百手摘星


    級別:光明使者 ( 14 )
    發帖:26800
    威望:2692 點
    金錢:81415521 USD
    貢獻:365848 點
    註冊:2016-07-06

    要发码就发码,简单点的,无形中浪费了很多人的很多时间,时间即是生命,其实是一种很缺德的行为。


    點評

      TOP Posted: 08-11 17:53 熱門評論 引用 | 點評
      盲流子


      級別:風雲使者 ( 13 )
      發帖:14421
      威望:3076 點
      金錢:1450 USD
      貢獻:126789 點
      註冊:2023-01-21

      教坏小朋友了
      TOP Posted: 08-11 18:01 #3樓 引用 | 點評
      枫火燎原


      級別:騎士 ( 10 )
      發帖:3329
      威望:351 點
      金錢:4723 USD
      貢獻:0 點
      註冊:2021-02-25

      感谢分享
      TOP Posted: 08-11 18:02 #4樓 引用 | 點評
      雾松


      級別:騎士 ( 10 )
      發帖:843
      威望:302 點
      金錢:415 USD
      貢獻:490 點
      註冊:2022-11-17

      大佬牛逼
      TOP Posted: 08-11 18:06 #5樓 引用 | 點評
      子树


      級別:精靈王 ( 12 )
      發帖:24092
      威望:2450 點
      金錢:34049 USD
      貢獻:0 點
      註冊:2022-11-15

      感谢分享
      TOP Posted: 08-11 18:15 #6樓 引用 | 點評
      艹留北城


      級別:新手上路 ( 8 )
      發帖:1008
      威望:82 點
      金錢:108653473 USD
      貢獻:11 點
      註冊:2015-02-10

      变相的给一些恶意抢注的人增加了筹码
      TOP Posted: 08-11 18:22 #7樓 引用 | 點評
      爱吃奶的小李


      級別:光明使者 ( 14 )
      發帖:4260
      威望:29007 點
      金錢:151850 USD
      貢獻:99999 點
      註冊:2021-06-26

      沃日,都上代码了
      TOP Posted: 08-11 18:24 #8樓 引用 | 點評
      飛无痕


      級別:俠客 ( 9 )
      發帖:708
      威望:168 點
      金錢:3551 USD
      貢獻:0 點
      註冊:2023-04-27

      1024
      TOP Posted: 08-11 18:27 #9樓 引用 | 點評
      当个好人


      級別:精靈王 ( 12 )
      發帖:9203
      威望:1297 點
      金錢:11013 USD
      貢獻:23000 點
      註冊:2022-03-13

      真游客抢码很不容易的
      TOP Posted: 08-11 18:54 #10樓 引用 | 點評
      潇洒在风尘间


      級別:騎士 ( 10 )
      發帖:4829
      威望:501 點
      金錢:10090 USD
      貢獻:10 點
      註冊:2023-03-15


      太多人抢码了
      TOP Posted: 08-11 20:55 #11樓 引用 | 點評
      爱曰睡美人


      級別:風雲使者 ( 13 )
      發帖:13077
      威望:1345 點
      金錢:23862 USD
      貢獻:241215 點
      註冊:2010-01-30

      是时候学习真正的技术了,码没试出来却学会了敲代码就尴尬了


      點評

        TOP Posted: 08-11 21:07 #12樓 引用 | 點評
        談天說道


        級別:精靈王 ( 12 )
        發帖:11702
        威望:1478 點
        金錢:51105 USD
        貢獻:21700 點
        註冊:2022-11-16

        学习了,下次发码的时候试试隐藏15位,看看你这脚本要多久才能把码试出来
        ------------------------
        D


        點評

          TOP Posted: 08-11 21:49 #13樓 引用 | 點評
          GenderLab


          級別:新手上路 ( 8 )
          發帖:428
          威望:93 點
          金錢:10571 USD
          貢獻:0 點
          註冊:2021-10-26

          1024
          TOP Posted: 08-11 21:50 #14樓 引用 | 點評
          白头鹰


          級別:騎士 ( 10 )
          發帖:606
          威望:121 點
          金錢:670 USD
          貢獻:19800 點
          註冊:2023-05-31

          夹子比较多……
          TOP Posted: 08-11 22:22 #15樓 引用 | 點評
          掂過碌蔗


          級別:風雲使者 ( 13 )
          發帖:36440
          威望:5429 點
          金錢:32662 USD
          貢獻:0 點
          註冊:2020-07-17

          更多夹子了
          ------------------------
          我自安好,来去随风
           
          TOP Posted: 08-11 23:02 #16樓 引用 | 點評
          缘无尽


          級別:俠客 ( 9 )
          發帖:1245
          威望:210 點
          金錢:1669 USD
          貢獻:0 點
          註冊:2016-03-20


          感谢分享
          TOP Posted: 08-11 23:09 #17樓 引用 | 點評
          特洛夫斯基


          級別:精靈王 ( 12 )
          發帖:13728
          威望:1276 點
          金錢:56023177 USD
          貢獻:28944 點
          註冊:2015-01-27

          不要夹子
          TOP Posted: 08-11 23:19 #18樓 引用 | 點評
          Oliver123


          級別:聖騎士 ( 11 )
          發帖:1166
          威望:214 點
          金錢:4222 USD
          貢獻:25034 點
          註冊:2021-11-04

          感谢分享
          TOP Posted: 08-11 23:20 #19樓 引用 | 點評
          晓风残月0878


          級別:新手上路 ( 8 )
          發帖:19
          威望:2 點
          金錢:19 USD
          貢獻:0 點
          註冊:2023-08-03

          1024
          TOP Posted: 08-11 23:35 #20樓 引用 | 點評
          海南航空787


          級別:禁止發言 ( 8 )
          發帖:147
          威望:15 點
          金錢:6028 USD
          貢獻:134 點
          註冊:2023-06-06

          然并卵,不还是要一个一个试?


          點評

            TOP Posted: 08-11 23:52 #21樓 引用 | 點評
            koochem


            級別:俠客 ( 9 )
            發帖:1208
            威望:213 點
            金錢:668 USD
            貢獻:1027 點
            註冊:2023-01-12

            然而还是有很多想要码的人,苦于无法上岸。


            點評

              TOP Posted: 08-11 23:55 #22樓 引用 | 點評
              Lil原上草


              級別:精靈王 ( 12 )
              發帖:2438
              威望:384 點
              金錢:14708 USD
              貢獻:77777 點
              註冊:2022-11-19


              还好去年抢到一码上岸了
              TOP Posted: 08-12 00:08 #23樓 引用 | 點評
              美胸控


              級別:聖騎士 ( 11 )
              發帖:9690
              威望:971 點
              金錢:14171 USD
              貢獻:0 點
              註冊:2019-02-23

              内容精彩
              TOP Posted: 08-12 00:30 #24樓 引用 | 點評

              .:. 草榴社區 -> 技術討論區

              快速回帖 頂端
              內容
              HTML 代碼不可用

              使用簽名
              Wind Code自動轉換

              按 Ctrl+Enter 直接提交