php 快速生成a z0 9,php – 将数字10转换为62(a-zA-Z0-9)

一个快速而肮脏的解决方案可以使用这样的功能:

function toChars($number) {

$res = base_convert($number, 10,26);

$res = strtr($res,'0123456789','qrstuvxwyz');

return $res;

}

基数转换将您的号码转换为数字为0-9a-p的基数

那么你可以用快速的字符替换去掉剩余的数字。

您可能会发现,该功能很容易可逆。

function toNum($number) {

$res = strtr($number,'qrstuvxwyz','0123456789');

$res = base_convert($number, 26,10);

return $res;

}

顺便说一句,你会用这个功能来做什么?

编辑:

基于问题的更改和@jnpcl答案,一组函数执行基本转换,而不使用pow和log(它们需要一半的时间来完成测试)。

这些函数仅适用于整数值

function toBase($num, $b=62) {

$base='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

$r = $num % $b ;

$res = $base[$r];

$q = floor($num/$b);

while ($q) {

$r = $q % $b;

$q =floor($q/$b);

$res = $base[$r].$res;

}

return $res;

}

function to10( $num, $b=62) {

$base='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

$limit = strlen($num);

$res=strpos($base,$num[0]);

for($i=1;$i

$res = $b * $res + strpos($base,$num[$i]);

}

return $res;

}

考试

for ($i = 0; $i<1000000; $i++) {

$x = toBase($i);

$y = to10($x);

if ($i-$y)

echo "\n$i -> $x -> $y";

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值