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


級別:精靈王 ( 12 )
發帖:1226
威望:906 點
金錢:999 USD
貢獻:31448 點
註冊: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 )
發帖:26817
威望:2694 點
金錢:81426882 USD
貢獻:365848 點
註冊:2016-07-06

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


點評

    TOP Posted: 08-11 17:53 #1樓 引用 | 點評
    夜游宫


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

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

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



    點評

      TOP Posted: 08-11 18:00 #2樓 引用 | 點評
      盲流子


      級別:光明使者 ( 14 )
      發帖:33529
      威望:39715 點
      金錢:30005 USD
      貢獻:456789 點
      註冊:2023-01-21

      教坏小朋友了
      ------------------------
      D

      TOP Posted: 08-11 18:01 #3樓 引用 | 點評
      枫火燎原


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

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


      級別:騎士 ( 10 )
      發帖:1137
      威望:366 點
      金錢:102 USD
      貢獻:190 點
      註冊:2022-11-17

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


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

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


      級別:俠客 ( 9 )
      發帖:1175
      威望:104 點
      金錢:413 USD
      貢獻:361 點
      註冊:2015-02-10

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


      級別:光明使者 ( 14 )
      發帖:4384
      威望:33428 點
      金錢:152624 USD
      貢獻:98799 點
      註冊:2021-06-26

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


      級別:聖騎士 ( 11 )
      發帖:2524
      威望:701 點
      金錢:4684 USD
      貢獻:7315 點
      註冊:2023-04-27

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


      級別:精靈王 ( 12 )
      發帖:13080
      威望:2319 點
      金錢:7975 USD
      貢獻:36000 點
      註冊:2022-03-13

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


      級別:聖騎士 ( 11 )
      發帖:6639
      威望:840 點
      金錢:22458 USD
      貢獻:10 點
      註冊:2023-03-15

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


      級別:風雲使者 ( 13 )
      發帖:15458
      威望:1607 點
      金錢:41600 USD
      貢獻:241216 點
      註冊:2010-01-30

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


      點評

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


        級別:精靈王 ( 12 )
        發帖:13380
        威望:2053 點
        金錢:8786 USD
        貢獻:12700 點
        註冊:2022-11-16

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


        點評

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


          級別:俠客 ( 9 )
          發帖:461
          威望:107 點
          金錢:15614 USD
          貢獻:0 點
          註冊:2021-10-26

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


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

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


          級別:天使 ( 14 )
          發帖:39024
          威望:7669 點
          金錢:70486 USD
          貢獻:2345679 點
          註冊:2020-07-17
          認證: 技術區認證會員
          2024-01-16

          更多夹子了
          ------------------------
          我自安好,来去随风
           


          TOP Posted: 08-11 23:02 #16樓 引用 | 點評
          缘无尽


          級別:聖騎士 ( 11 )
          發帖:3361
          威望:642 點
          金錢:4091 USD
          貢獻:0 點
          註冊:2016-03-20

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


          級別:精靈王 ( 12 )
          發帖:16211
          威望:1539 點
          金錢:55660217 USD
          貢獻:66666 點
          註冊:2015-01-27

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


          級別:精靈王 ( 12 )
          發帖:2101
          威望:703 點
          金錢:6337 USD
          貢獻:25034 點
          註冊:2021-11-04

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


          級別:新手上路 ( 8 )
          發帖:25
          威望:3 點
          金錢:26 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


            級別:精靈王 ( 12 )
            發帖:2038
            威望:1021 點
            金錢:15966 USD
            貢獻:20581 點
            註冊:2023-01-12

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


            點評

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


              級別:禁止發言 ( 8 )
              發帖:2491
              威望:391 點
              金錢:47790 USD
              貢獻:77777 點
              註冊:2022-11-19

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


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

              内容精彩
              TOP Posted: 08-12 00:30 #24樓 引用 | 點評
              .:. 草榴社區 » 技術討論區


              電腦版 手機版 客戶端 DMCA
              用時 0.01(s) x2, 11-07 10:52