最近遇到一个问题,需要将数字 ID 转化为字母 ID,而且需要有一种对应关系保证数字 ID 和字母 ID 一一对应,如 11 可以转化为 aa 这样,求各位大佬给出算法或思路.
1
izdour 2017-03-05 14:01:25 +08:00
。。。 md5 或 哈希?这是什么问题···
|
2
RE 2017-03-05 14:01:43 +08:00 via iPhone 2
10 进制转 26 或 52 进制
|
3
shoaly 2017-03-05 14:05:45 +08:00
echo "1234567890" | base64
MTIzNDU2Nzg5MAo= |
4
SoloCompany 2017-03-05 15:06:54 +08:00 via iPad
理论的最优解的话当然是 Long.toString(id, 62 或 52),要求数字可以超过 64bit 的话可以用 bigdecimal
|
5
zsx 2017-03-05 15:41:28 +08:00 1
'123456'.toString().replace(/\d/g, s => String.fromCharCode(parseInt(s) - 1 + 'A'.charCodeAt())) === 'ABCDEF'
|
6
loading 2017-03-05 15:43:32 +08:00 via Android
0-9 一共 10 个,字母大小写一共 52 个,映射不就好了?
|
8
syncher OP 有没有用 ASCII 的方法?
|
9
xiaozi 2017-03-05 17:55:17 +08:00
加密版本标识 + base62_encode(id * scale 倍数 + 偏移值)
|
10
xiaogui 2017-03-05 18:13:36 +08:00
楼主试试这个 http://hashids.org/
|
11
changwei 2017-03-05 18:45:10 +08:00 via Android
为什么会有这么奇怪的需求啊
|
13
cnwtex 2017-03-05 21:22:58 +08:00
@isCyan
function id62($strnum,$isdecode = false){ $id62obj = load::classes('id62','','LkEhbDuyXTV8iMrcIPNCGQqm1sHz2Kw5eafnJS4vYoj7gWORtF30pA6dZUlBx9'); if($isdecode){ return $id62obj->decode($strnum); }else{ return $id62obj->encode($strnum); } } id62 就是 62 进制函数 |
16
NeoAtlantis 2017-03-06 04:36:13 +08:00 via Android
直接找个加密算法大不了 AES 把数字加密然后转成 base64 ……密钥什么的自己定。可以双向转换,保证一对一,保证随机。
|