/**
* 生成一个唯一字符串
* @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;
}
用唯一的数字生成一个可控长度唯一字符串
最新推荐文章于 2022-03-04 18:29:48 发布