我需要在NodeJS API或C++加载项中生成唯一的16位十进制值.
它在我的组织内部使用(礼品卡id)。性能并不重要,因为它是非实时生成的。
我已经寻找了一些选择,但不确定他们的安全。如果有更好的办法,请告诉我。
crypto.randomInt生成0到9之间的整数,16次。
文献资料说它避免了模偏。但如果连续使用16次,我不确定它是否是公正的。
% 10。我想这会有模偏。是否有任何API或技术可以安全地将SHA-256值切成16位十进制数字?
发布于 2022-12-26 20:21:30
在我看来,这些问题就像一个XY问题。
这就是为什么我建议采用以下方法:
然后,每个员工号码将与一些随机查找的礼品卡号码相关联。
如果你想保持年复一年的礼品卡号码不变,而不是每年都生成礼品卡,如果你期望你的公司正在成长,新员工需要礼品卡,而且你希望避免更高的数字与新员工之间的关联,那么是的,随机生成器将是有帮助的。
在这种情况下,您可以将员工人数乘以10或100,并在此范围内生成数字。举例来说,如果贵公司有10 000名雇员,你可以取1至1 000,然后随机产生号码,然后分配给雇员。检查碰撞将是容易的,因为保持一个数组的假设1000元素在内存中是简单和快速的。在发生碰撞的情况下,您只需要生成一个新的数字,直到没有冲突,或者添加一些固定值,比如1,直到没有冲突。
当稍后需要新卡时,将有足够的“整体”在这个范围内为新的数字。
函数可以如下所示:
next_card_number = Math.floor( Math.random() * N )最多的礼券号码。举例来说,如果有10 000名雇员,你可以使用999 999作为最高的礼品卡号码。
https://crypto.stackexchange.com/questions/103454
复制相似问题