![]() | 1 rwx 2013-07-26 18:12:28 +08:00 ![]() 自增ID -> 无限 6位字符串 -> 有限 把无限集映射到有限集这种事。。 |
![]() | 2 qiayue PRO 数字 0-9 10个 字母 a-z 26个 字母 A-Z 26个 字符 _和- 2个 用以上字符按照 64 (10 + 26 + 26 +2 = 64) 进制与自增 ID 进行一一对应 另外,64^6 = 68719476736 ,最多 687 亿数据 要想更多数据,增大进制,也就是增多字符即可 |
![]() | 3 qiayue PRO 没看清楚字母大小写不敏感,那么,就只能是去掉大写字母,成了 38 进制了 |
![]() | 5 leonwong OP @qiayue 那其实这样就是一个38进制的值的自增,我想体现多点随机性,最好这六位中不要出现纯数字,这种方式映射必然会出现纯数字的情况 |
![]() | 6 jybox 2013-07-26 18:36:21 +08:00 MD5取前6位... |
![]() | 9 rrfeng 2013-07-26 18:45:08 +08:00 我估计你的自己设计算法了…… |
![]() | 13 leonwong OP 微博短链接貌似很符合我的要求,谁能把短链接算法跟我说说,麻烦了 |
![]() | 15 binux 2013-07-26 19:04:55 +08:00 将6位字符按照一定的规律选出一定量,随机洗牌,存下来 不够了,再选一定的量,随机洗牌,存下来 |
![]() | 17 msg7086 2013-07-27 16:20:19 +08:00 @leonwong http://ra.gg/!iMD4o 我实现的。 |
![]() | 21 79bxh9b 2013-07-28 09:52:09 +08:00 id转成字符串,前面用0补足位数,再把id字符串反转,再一步base58编码 想更随机只要给base58的字典做随机乱序就行 |
![]() | 24 shiny 2013-07-28 13:27:55 +08:00 @leonwong 如果短网址代码就能满足需求,有个好处是足够简单,能够直接互转。以下是我写的 PHP 版本和 python 版本,最初生成的 PHP 算法来源于 phurl。 http://gist.github.com/shiny/6097499 http://gist.github.com/shiny/6097505 |
![]() | 25 binux 2013-07-28 13:28:01 +08:00 @leonwong 你的id肯定对应一些数据吧,比如说数据库的某一行。把字符串存起来,用id查也是查,用映射后的串查也是查,有什么不同? |
![]() | 27 shiny 2013-07-28 13:28:33 +08:00 |
![]() | 29 leonwong OP @binux 有点道理!我需要另外建立一张表来存储映射关系吗?这样就有点像独立标签这样了,那这些标签要按照一定规律保持唯一性,算法怎么实现? |
![]() | 31 79bxh9b 2013-07-28 18:49:24 +08:00 @leonwong 其实楼上shiny贴的代码就是base算法,只是用了54个字符。 base58就是用了58个字符的版本,123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ |
![]() | 32 manoon 2013-07-28 20:38:28 +08:00 mongodb 不就是这样的么? |