以文本方式查看主题

-  搭建论坛  (http://bbs.diylsoft.com:8118/starforum/index.asp)
--  经验交流  (http://bbs.diylsoft.com:8118/starforum/list.asp?boardid=5)
----  由ID怎么生成序列号  (http://bbs.diylsoft.com:8118/starforum/dispbbs.asp?boardid=5&id=17691)

--  作者:sheyouyou
--  发布时间:2008-5-11 14:45:42
--  由ID怎么生成序列号

有没有由ID 生成唯一序列号的方法或算法 最好算法能用密钥生成不同算法,ID能够得到不同算法产生的序列号。并且我需要的是由数字生成数字,ID<=8位,序列号<=10位。


--  作者:admin
--  发布时间:2008-5-11 15:27:31
--  
没有完全看明白,举个例子.
--  作者:sheyouyou
--  发布时间:2008-5-11 17:26:44
--  

比如我有:0001,0002,0003,0004 4个数A1,A2,A3,A4

要生成: 6151,5431,1651,2156 分别是B1,B2,B3,B4

数字A1通过某种可逆的算法得到唯一的B1,B1可以通过逆算法得到唯一的A1,而算法本身可以带入参数。整个过程和Base64编码一样,只是BASE64编码生成的是字符串,且生成的字符串比原码长1/3。而我用在条形码上,载体不能容纳下较长的字符串。所以我需要由不重复的数字通过某种算法生成另外一个不重复的数字

希望能提供算法设计思路

--  作者:FSJM
--  发布时间:2008-5-12 6:53:51
--  

你的A(1,2,3,4...)是有序的,而B(1,2,3,4...)要无序的,这种“互逆不重复”是很难的。

最简单的办法是建对照表(A,B),A是你的序号,B是你要的数;每增加一个记录,随机产生你要的数字串,到表中去查询,如果发现,则重新生成,否则增加。

“互逆”通过查询实现。


--  作者:admin
--  发布时间:2008-5-12 7:30:44
--  

“有序” 生成 “有序”是相对容易的,但生成“无序不重复”,几乎不可能;这个问题可以测试人头脑的智商。

注意:不能使用“4楼”类似的方法。


--  作者:sheyouyou
--  发布时间:2008-5-12 11:25:49
--  

两位高手说得对有序变无序不用替换对照表太难了,而替换对照表小了也没什么意义。再加上要可逆,位移也不好用,动态选择替换的数字也不能。还是不用算法,建表了。谢谢两位


--  作者:洪滨
--  发布时间:2008-5-12 20:23:06
--  
楼主是指用ID生成密钥功能吗?