伙伴们,请问有什么方法或算法可以根据一窜数字生成另外几个数字?

2013-11-05 00:26:44 +08:00
 ksex
如:根据数字字符串A:“1263864325“ 生成 4位数字的字符串B:“****”,当然,这四个数字不是简单地从字符串A中取出来,而是要根据A生成出来。

硬件方法、软件方法皆可,有思路、有good idea的都来说说吧
3845 次点击
所在节点    程序员
14 条回复
senghoo
2013-11-05 00:38:24 +08:00
你是要hash么。。。
yangqi
2013-11-05 00:41:41 +08:00
你这要用到压缩算法了吧。。。
FrankFang128
2013-11-05 00:57:07 +08:00
sum + padding , 哦呵呵呵
msg7086
2013-11-05 04:34:55 +08:00
CRC16(input)
fangzhzh
2013-11-05 08:36:54 +08:00
我是用的这个, 短链接生成算法, 把一个uuid生成一个6位字符串.

http://android-tech.diandian.com/post/2012-08-12/40034132931
arzusyume
2013-11-05 09:07:26 +08:00
不要反解的话md5取前4位
要反解的话弄个key,然后按位运算
arzusyume
2013-11-05 09:12:22 +08:00
啊,没仔细看,生成4位数字貌似只能是签名
那就位移XX位然后取前四位吧
antmanler
2013-11-05 10:24:23 +08:00
NFSwind
2013-11-05 13:43:57 +08:00
加密算法都可以的。。
stackpop
2013-11-05 14:21:35 +08:00
你的这个,如果只映射到4位数字,那么肯定会有很多碰撞。
10iii
2013-11-05 16:10:26 +08:00
这过程叫hash,从一个无限整数空间[“数字字符串A:“1263864325“”]到有限(10K)以内[4位数字的字符串B]的映射.碰撞是必然而且频繁的,反向当然就是不可能的。
随手捡一个符合楼主要求的 : B = left(A, 4) [我果然是个excel程序员]
Liang
2013-11-05 17:58:57 +08:00
要实现任何字符串生成四位字符串的想法是不可能的,如果这样,那容量限制的问题就可以解决了。
如果是固定长度的字符串,楼主或者可以试试进制转换,比如10进制转64进制,1234567890=19Bwbi。这样也可以逆转了。
再者,一定要任意长度转固定长度的话,只能数据库了。固定长度做key。
wy315700
2013-11-05 18:06:38 +08:00
把很长的数据生成短数据用HASH
根据短数据生成长数据是pseudo random generator 如rc4
alsotang
2013-11-05 18:12:17 +08:00
[7] pry(main)> Digest::MD5.hexdigest("1263864325").scan(/\d/).join()[0...4]
=> "5863"

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/88037

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX