首页 > 产生唯一随机码方法疑问

产生唯一随机码方法疑问

现在的web应用中都经常会遇到邀请码或激活码等问题,如何生成唯一且随机的激活码是一个问题。下面的这个方法的唯一性怎么得到的。

条件是邀请码都是数字的
1) 获取id: 155
2) 转换成8进制:233
3) 转为字符串,并在后面加'9'字符:2339
4)在后面随机产生若干个随机数字字符:2003967524987
转为8进制后就不会出现9这个字符,然后在后面加个'9',这样就能确定唯一性。最后在后面产生一些随机数字就可以。


ID是唯一的,不然就不是ID了。那么ID不管转成几进制,它都是唯一的,为什么要加9呢?

注意这里还有一个后续的操作,就是后缀一个随机数,那么,假设我们用10进制,就可能会出现这样的情况

ID=15,R=56789,拼出来是156789
ID=155,R=6789,拼出来是156789
出现重复

解决办法是在ID和随机数R之间加一个分隔符,避免它们的混淆。

如果没要求随机码是数字,那这个分隔符好办,但看楼主的意思,这个随机码得是数字组成的,所以需要用一个不可能出现在ID中的数字来作为分隔符,所以……聪明人想到了8进制,因为8进制里没有8和9,可以用8或者9来作为分隔符。

当然,2-8进制都是可以的,但是2进制生成的验证码太长,3-7进制不常用,也没有现成的算法,所以就选了8进制了。如果要求随机码尽可能的短,那么用9进制平均会短一点……这都是题外话了。

现在,ID唯一,ID转换为8进制唯一,加上固定的分隔符8或者9(任选其一,但选定了就得一直使用,不能换了),再加上任意后缀,它都唯一。

仍然需要注意,为同一个ID生成的两个随机码有可能出现重复,不过随机码一般都是使用一次就丢弃,所以一般不会出现为一个ID生成两个随机码的情况,所以可以不考虑了。

【热门文章】
【热门文章】