php 根据自增id创建唯一编号类


Posted in PHP onApril 06, 2017

在开发过程中,我们数据表一般都使用自增数字作为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);
    // 生成字母部分
    $division = (int)($id/$base);
    $word = '';
    while($division){
      $tmp = fmod($division, 26); // 只使用26个大写字母
      $tmp = chr($tmp + 65);   // 转为字母
      $word .= $tmp;
      $division = floor($division/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

<?php
require '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-001
9 = F-A-009
10 = F-A-010
99 = F-A-099
100 = F-A-100
999 = F-A-999
1000 = F-B-000
1009 = F-B-009
2099 = F-C-099
3999 = F-D-999
9999 = F-J-999
14999 = F-O-999
99999 = F-VD-999

源码下载地址:点击查看

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
php cout&amp;lt;&amp;lt;的一点看法
Jan 24 PHP
备份mysql数据库的php代码(一个表一个文件)
May 28 PHP
php启用zlib压缩文件的配置方法
Jun 12 PHP
AJAX的跨域访问-两种有效的解决方法介绍
Jun 22 PHP
php下载文件源代码(强制任意文件格式下载)
May 09 PHP
Linux安装配置php环境的方法
Jan 14 PHP
浅析Yii2缓存的使用
May 10 PHP
PHP批量获取网页中所有固定种子链接的方法
Nov 18 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
Oct 11 PHP
微信公众号之主动给用户发送消息功能
Jun 22 PHP
php实现文件上传基本验证
Mar 04 PHP
php及codeigniter使用session-cookie的方法(详解)
Apr 06 #PHP
浅谈php(codeigniter)安全性注意事项
Apr 06 #PHP
详谈php ip2long 出现负数的原因及解决方法
Apr 05 #PHP
php生成0~1随机小数的方法(必看)
Apr 05 #PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
Apr 05 #PHP
php str_getcsv把字符串解析为数组的实现方法
Apr 05 #PHP
php 从指定数字中获取随机组合的简单方法(推荐)
Apr 05 #PHP
You might like
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
2011/05/19 PHP
PHP手机短信验证码实现流程详解
2018/05/17 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
jQuery与其它库冲突的解决方法
2010/06/25 Javascript
jquery插件开发注意事项小结
2013/06/04 Javascript
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
2015/07/05 Javascript
JavaScript实现的浮动层框架用法实例分析
2015/10/10 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
2015/12/04 Javascript
VUEJS实战之构建基础并渲染出列表(1)
2016/06/13 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
2017/01/17 Javascript
socket.io学习教程之基础介绍(一)
2017/04/29 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
jQuery实现获取及设置CSS样式操作详解
2018/09/05 jQuery
vue2.0中set添加属性后视图不能更新的解决办法
2019/02/22 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
2020/11/11 Javascript
JQuery绑定事件四种实现方法解析
2020/12/02 jQuery
jQuery实现购物车全功能
2021/01/11 jQuery
详解Python字符串对象的实现
2015/12/24 Python
Python多线程、异步+多进程爬虫实现代码
2016/02/17 Python
python爬虫实战之最简单的网页爬虫教程
2017/08/13 Python
Python3.x对JSON的一些操作示例
2017/09/01 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
对pandas通过索引提取dataframe的行方法详解
2019/02/01 Python
Python实现的微信支付方式总结【三种方式】
2019/04/13 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
用python拟合等角螺线的实现示例
2019/12/27 Python
Scrapy框架介绍之Puppeteer渲染的使用
2020/06/19 Python
如何利用cmp命令比较文件
2016/04/11 面试题
关于期中考试的反思
2014/02/02 职场文书
《花的勇气》教后反思
2014/02/12 职场文书
交通事故和解协议书
2015/01/27 职场文书
Python中使用ipython的详细教程
2021/06/22 Python