用唯一的数字生成一个可控长度唯一字符串

/**
 * 生成一个唯一字符串
 * @param int $val 建议给id 每个不一样的id返一个不一样的值
 * @param int $len 生成的字符串初始长度 从多少位开始生成
 * @throws
 * @return string
 */
function only($val,$len){
    //生成唯一数的元素 这个数组内的数据绝不能相同 其他随便填 数据越多生成唯一数可控制的长度越短 
    $element = array('b',1,'X','m','t','E','y',2,'h','M','C','Z','r',3,'I','l','J','a','L','Q',4,'N','G','d','e','U','R','F','i','u',5,'k','x','c','H','w','f','V',6,'o','S','q','g',7,'s','v','W',8,'p','D','A',9,'j','O','P','K','z',0,'T','B','Y','n');
    $element_len = count($element);//获取元素长度
    $cycle_val = $power_number = (int)log($val,$element_len)+1;//次方数加一 可以获取长度 就相当于 100 是10的2次方 但他是三位数
    if($len>$cycle_val)$cycle_val = $len;//获取最长值 当循环数
    $only = '';//创建唯一数
    for($i=0 ;$i<$cycle_val ;$i++){//循环获取
        if($i<$power_number){//当i不超过 值原有的长度
            if($i==$len-1)$val += 1;//判断i是否等于 默认长度 加一
            $remainder = $val%$element_len;//获取于数
            $val = ($val-$remainder)/$element_len;//获取剩余的值
            $only = $element[$remainder].$only;//拼接唯一值
        }else{
            $build = 0;//创建建值
            if($i==$cycle_val-1)$build = 1;//如果是最后一位 取一
            $only = $element[$build].$only;//拼接唯一值
        }
    }
    return $only;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘Liou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值