例如订单表id=20160111197681234,只看id我们并不知道这个id是订单表的id,而转为编号O-20160111197681234,则很随意马虎看出是订单表的记录,然后可以根据id在订单表中征采。
编号创建的规则
1.唯一

利用自增id天生,担保唯一性
2.尽可能短
可利用数字求余对应字母的办法处理,创建较短的编号
算法事理
1.加自定义前缀,用于标识
2.格式利用前缀+字母+数字组成,数字只保留N位,超过的利用数字求余的办法利用字母对应
例如:
id=1
前缀=F
数字保留3位
则创建的编号为:F-A-001
代码如下:
IDCode.class.php
<?php/
php 根据自增id创建唯一编号类
Date: 2016-11-27
Author: fdipzone
Ver: 1.0
Func
Public create 创建编号
/class IDCode{ // class start
/
创建编号
@param Int $id 自增id
@param Int $num_length 数字最大位数
@param String $prefix 前缀
@return String
/
public static function create($id, $num_length, $prefix){
// 基数
$base = pow(10, $num_length); // 天生字母部分
$pision = (int)($id/$base); $word = ''; while($pision){ $tmp = fmod($pision, 26); // 只利用26个大写字母
$tmp = chr($tmp + 65); // 转为字母
$word .= $tmp; $pision = floor($pision/26);
} if($word==''){ $word = chr(65);
} // 天生数字部分
$mod = $id % $base; $digital = str_pad($mod, $num_length, 0, STR_PAD_LEFT); $code = sprintf('%s-%s-%s', $prefix, $word, $digital); return $code;
}
} // class end
?>
demo.php
<?phprequire 'IDCode.class.php';$test_ids = array(1,9,10,99,100,999,1000,1009,2099,3999,9999,14999,99999);foreach($test_ids as $test_id){ echo $test_id.' = '.IDCode::create($test_id, 3, 'F').'<br>';
}?>
输出:
1 = F-A-0019 = F-A-00910 = F-A-01099 = F-A-099100 = F-A-100999 = F-A-9991000 = F-B-0001009 = F-B-0092099 = F-C-0993999 = F-D-9999999 = F-J-99914999 = F-O-99999999 = F-VD-999
在开拓过程中,我们数据表一样平常都利用自增数字作为id主键,而id是数字型,不随意马虎理解。我们把id按一定格式转为编号后,很随意马虎根据编号知道代表的是什么内容。
例如订单表id=20160111197681234,只看id我们并不知道这个id是订单表的id,而转为编号O-20160111197681234,则很随意马虎看出是订单表的记录,然后可以根据id在订单表中征采。
编号创建的规则
1.唯一
利用自增id天生,担保唯一性
2.尽可能短
可利用数字求余对应字母的办法处理,创建较短的编号
算法事理
1.加自定义前缀,用于标识
2.格式利用前缀+字母+数字组成,数字只保留N位,超过的利用数字求余的办法利用字母对应
例如:
id=1
前缀=F
数字保留3位
则创建的编号为:F-A-001
代码如下:
IDCode.class.php
<?php/
php 根据自增id创建唯一编号类
Date: 2016-11-27
Author: fdipzone
Ver: 1.0
Func
Public create 创建编号
/class IDCode{ // class start
/
创建编号
@param Int $id 自增id
@param Int $num_length 数字最大位数
@param String $prefix 前缀
@return String
/
public static function create($id, $num_length, $prefix){
// 基数
$base = pow(10, $num_length); // 天生字母部分
$pision = (int)($id/$base); $word = ''; while($pision){ $tmp = fmod($pision, 26); // 只利用26个大写字母
$tmp = chr($tmp + 65); // 转为字母
$word .= $tmp; $pision = floor($pision/26);
} if($word==''){ $word = chr(65);
} // 天生数字部分
$mod = $id % $base; $digital = str_pad($mod, $num_length, 0, STR_PAD_LEFT); $code = sprintf('%s-%s-%s', $prefix, $word, $digital); return $code;
}
} // class end
?>
demo.php
<?phprequire 'IDCode.class.php';$test_ids = array(1,9,10,99,100,999,1000,1009,2099,3999,9999,14999,99999);foreach($test_ids as $test_id){ echo $test_id.' = '.IDCode::create($test_id, 3, 'F').'<br>';
}?>
输出:
1 = F-A-0019 = F-A-00910 = F-A-01099 = F-A-099100 = F-A-100999 = F-A-9991000 = F-B-0001009 = F-B-0092099 = F-C-0993999 = F-D-9999999 = F-J-99914999 = F-O-99999999 = F-VD-999
本文讲解了通过php 中的自增id来创建唯一编号类