生成与Python
自定义格式化字符串我有一个生成的字符串(类似UUID)字符串生成与Python
这是JS代码的Javascript代码:
var t = "xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxx"
, i = (new Date).getTime();
return e = t.replace(/[x]/g, function() {
var e = (i + 16 * Math.random()) % 16 | 0;
return i = Math.floor(i/16),
e.toString(16)
})
我能在这个字符串蟒蛇?
使用正则表达式替换和新secrets
模块的Python 3.6 - 因为这Python代码是加密安全和它产生较少的冲突/可重复的序列,这是不等同于JavaScript代码。
秘密模块用于生成适合于管理如密码数据加密的强随机号码,帐户认证,安全令牌,以及相关的秘密。
特别是,秘密应该优先于随机模块中的默认伪随机数生成器,它被设计用于建模和仿真,而不是安全或密码学。
>>> import re
>>> from secrets import choice
>>> re.sub('x',
lambda m: choice('abdef'),
'xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxx')
'5baf40e2-13ef-4692-8e33-507b-40fb84ff'
你会想这对于你的ID,以成为真正尽可能独特的,而不是这实际上是建立在明确得到号码重复序列Mersenne Twister MT19937 - 使用random
。
对于Python < 3.6,你可以做
try:
from secrets import choice
except ImportError:
choice = random.SystemRandom().choice
谢谢。很好的回答:) –
@zaph'Math.random()'的质量不能保证。此外,JavaScript代码中只使用当前时间的4位最低位。 –
@zaph c.f. https://*.com/a/3357323/918959 –
Python的默认提供UUID
代:
>>> import uuid
>>> uuid.uuid4()
UUID('bd65600d-8669-4903-8a14-af88203add38')
>>> str(uuid.uuid4())
'f50ec0b7-f960-400d-91f0-c42a6d44e3d0'
>>> uuid.uuid4().hex
'9fe2c4e93f654fdbb24c02b15259716c'
OP的代码使用基于当前时间的算法创建UUID。此代码不使用相同的算法。 –
这不是我想成为,但无论如何thx。 –
所以基本上你想要一些随机的十六进制数字:
from random import randint
'-'.join(''.join('{:x}'.format(randint(0, 15)) for _ in range(y)) for y in [10, 4, 4, 4, 10])
其中10,4,4,4,10在各段的长度你的格式字符串。你可能想添加一个种子,但基本上这就是你的JS代码所做的,产生像'f693a7aef0-9528-5f38-7be5-9c1dba44b9'
这样的字符串。
非常感谢。这正是我想要的。 –
bwt,其[8,4,4,4,8] –
'binascii.b2a_hex(os.urandom(5))' –
人们似乎认为你询问如何生成随机的UUID;你可能想澄清你的问题。 –
@Rawing thx。我认为现在已修复 –