gpt4 book ai didi

python - 将数字 ID 转换为简短的不同字母数字代码的算法

转载 作者:搜寻专家 更新时间:2023-10-30 20:01:10 24 4
gpt4 key购买 nike

我有来自数据库的 ID,我希望它们简短且易于肉眼区分(即,两个相近的数字看起来不同)。

像这样:

13892359163211 -> ALO2WE7
13992351216421 -> 52NBEK3

或类似的算法。有点像哈希,除了它需要是可逆的?像 AES 这样的加密算法几乎是理想的,只是它的输出太长了。 (而且矫枉过正)。

我正在使用 Python (3),尽管我认为这并不重要

最佳答案

新答案,“接近”数字看起来不同

您可以使用 RSA 来加密(然后解密)您的号码。这绝对是矫枉过正 - 但是......这是一个例子:安装 https://github.com/sybrenstuvel/python-rsa (pip install rsa)

import rsa
import rsa.core
# (pubkey, privkey) = rsa.newkeys(64) # Generate key pair
pubkey = rsa.PublicKey(n=9645943279888986023, e=65537)
privkey = rsa.PrivateKey(n=9645943279888986023, e=65537, d=7507666207464026273, p=9255782423, q=1042153201)

print("1st", rsa.core.encrypt_int(13892359163211, pubkey.e, pubkey.n))
print("2nd", rsa.core.encrypt_int(13992351216421, pubkey.e, pubkey.n))
print("1st", hex(rsa.core.encrypt_int(13892359163211, pubkey.e, pubkey.n))[2:])
print("2nd", hex(rsa.core.encrypt_int(13992351216421, pubkey.e, pubkey.n))[2:])

# If you want to compare a couple of numbers that are similar
for i in range (13892359163211, 13892359163251):
encrypted = rsa.core.encrypt_int(i, pubkey.e, pubkey.n)
# decrypted = rsa.core.decrypt_int(encrypted, privkey.d, privkey.n)
print (i, hex(encrypted)[2:], encrypted)

请注意,您不能加密大于 pubkey.n 的数字。这是与 RSA 相关的限制。通过生成具有更高 n 的不同 key 对,您可以避免此问题。如果您希望所有生成的数字具有相同的长度,请在它们前面加上前导零。您还可以考虑将它们设为大写以提高可读性。要使显示的字符串更短,请考虑使用我在下面的旧答案中提到的 base62 编码。

输出

1st 5427392181794576250
2nd 7543432434424555966
1st 4b51f86f0c99177a
2nd 68afa7d5110929be

input hex(encrypted) encrypted
13892359163211 4b51f86f0c99177a 5427392181794576250
13892359163212 2039f9a3f5cf5d46 2322161565485194566
13892359163213 173997b57918a6c3 1673535542221383363
13892359163214 36644663653bbb4 244958435527080884
13892359163215 c2eeec0c054e633 877901489011746355
...

旧答案 与显示数字有点短有关,没有意识到它们看起来应该有很大不同

您想将数字的底数从 10 更改为更大的数字以使用更少的字符。有关 base 62 (a-zA-Z0-9) 的示例,请参见 https://stackoverflow.com/a/1119769

或者以 16 为基数,(0-9A-F,十六进制)又快又脏。

hex(13892359163211)[2:] # -> 'ca291220d4b'

关于python - 将数字 ID 转换为简短的不同字母数字代码的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57624017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com