The*_*Guy 1 php alphanumeric base-conversion id
我想生成一个由字母数字字符组成的会员号码,删除i o并l在输入时节省混淆.要在php中完成(如果重要的话也使用Laravel 5.7 - 但我觉得这是一个php问题)
如果只使用0-9,会员编号将从00001开始,第一个人和第11个人将有00011.我想使用0-9 + az的字母数字字符(删除所说的字母)
0-9(总共10个字符),abcdefghjkmnpqrstuvwxyz(共23个字符) - 这在每个计数周期(0-10 + aZ)中总共给出33个字符.而不只是10(0-10)
所以第一个会员号仍然是00001,其中第12个现在是0000a,第14个0000c和第34个将是0001a.
总而言之,我需要一种定义字符的方法,以便可以基于用户的id生成的方式进行计数.
我希望我已经解释得这么好了.
假设这些是您要使用的唯一字符:
0123456789abcdefghjkmnpqrstuvwxyz
Run Code Online (Sandbox Code Playgroud)
您可以使用base_convert()和strtr()将结果的特定字符转换为所需的字符.
function mybase33($number) {
return str_pad(strtr(base_convert($number, 10, 33), [
'i' => 'j',
'j' => 'k',
'k' => 'm',
'l' => 'n',
'm' => 'p',
'n' => 'q',
'o' => 'r',
'p' => 's',
'q' => 't',
'r' => 'u',
's' => 'v',
't' => 'w',
'u' => 'x',
'v' => 'y',
'w' => 'z',
]), 5, '0', STR_PAD_LEFT);
}
echo "9 is ".mybase33(9)."\n";
echo "10 is ".mybase33(10)."\n";
echo "12 is ".mybase33(12)."\n";
echo "14 is ".mybase33(14)."\n";
echo "32 is ".mybase33(32)."\n";
echo "33 is ".mybase33(33)."\n";
echo "34 is ".mybase33(34)."\n";
Run Code Online (Sandbox Code Playgroud)
输出:
9 is 00009
10 is 0000a
12 is 0000c
14 is 0000e
32 is 0000z
33 is 00010
34 is 00011
Run Code Online (Sandbox Code Playgroud)
说明
输出base_convert()使用这些字符:
0123456789abcdefghijklmnopqrstuvw
Run Code Online (Sandbox Code Playgroud)
将该strtr()输出的特定字符转换为:
0123456789abcdefghjkmnpqrstuvwxyz
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
294 次 |
| 最近记录: |