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和数据库结合的一个简单的web实例 代码分析 (php初学者)
Jul 28 PHP
采用PHP函数memory_get_usage获取PHP内存清耗量的方法
Dec 06 PHP
提高PHP性能的编码技巧以及性能优化详细解析
Aug 24 PHP
php define的第二个参数使用方法
Nov 04 PHP
ThinkPHP实现支付宝接口功能实例
Dec 02 PHP
php调整服务器时间的方法
Apr 03 PHP
PHP实现全角字符转为半角方法汇总
Jul 09 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
php+html5实现无刷新图片上传教程
Jan 22 PHP
PHP预定义变量9大超全局数组用法详解
Apr 23 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
Aug 12 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
Jul 13 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
第五节--克隆
2006/11/16 PHP
php对xml文件的增删改查操作实现方法分析
2017/05/19 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
jQuery 常见开发使用技巧总结
2009/12/26 Javascript
javascript代码加载优化方法
2011/01/30 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
Jquery颜色选择器ColorPicker实现代码
2012/11/14 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
2013/01/18 Javascript
window.opener用法和用途实例介绍
2013/08/19 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
JavaScript中的Number数字类型学习笔记
2016/05/26 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
详解用webpack把我们的业务模块分开打包的方法
2017/07/20 Javascript
nodejs发送http请求时遇到404长时间未响应的解决方法
2017/12/10 NodeJs
vue ssr 指南详读
2018/06/29 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
npm的lock机制解析
2019/06/20 Javascript
Weex开发之地图篇的具体使用
2019/10/16 Javascript
在Mac OS上搭建Python的开发环境
2015/12/24 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
Django之form组件自动校验数据实现
2020/01/14 Python
Python求两个字符串最长公共子序列代码实例
2020/03/05 Python
canvas小画板之平滑曲线的实现
2020/08/12 HTML / CSS
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
杭州SQL浙江浙大网新恩普软件有限公司
2013/07/27 面试题
毕业生毕业总结的自我评价范文
2013/11/02 职场文书
计算机应用专业推荐信
2013/11/13 职场文书
教师自我评价范文
2013/12/16 职场文书
工程师岗位职责规定
2014/02/26 职场文书
父母对孩子的寄语
2014/04/09 职场文书
员工团队活动方案
2014/08/28 职场文书
亲戚关系证明
2015/06/24 职场文书
优秀的商业计划书,让融资一步到位
2019/05/07 职场文书
Java 数组的使用
2022/05/11 Java/Android