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初学者们头痛的十四个问题
Jan 15 PHP
PHP session常见问题集锦及解决办法总结
Mar 18 PHP
php过滤危险html代码
Aug 18 PHP
php Smarty模板生成html文档的方法
Apr 12 PHP
php下封装较好的数字分页方法
Nov 23 PHP
php调用C代码的实现方法
Mar 11 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
Dec 15 PHP
PHP中把数据库查询结果输出为json格式简单实例
Apr 09 PHP
PHP实现通过URL提取根域名
Mar 31 PHP
php获取ip及网址的简单方法(必看)
Apr 01 PHP
PHP实现网站访问量计数器
Oct 27 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
Aug 14 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
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
一句话JavaScript表单验证代码
2009/08/02 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
JavaScript实现动态添加,删除行的方法实例详解
2015/07/02 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
Bootstrap零基础入门教程(二)
2016/07/18 Javascript
深入浅出 jQuery中的事件机制
2016/08/23 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
详解redux异步操作实践
2018/08/15 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
python实现一次创建多级目录的方法
2015/05/15 Python
Python中生成Epoch的方法
2017/04/26 Python
python爬虫爬取某站上海租房图片
2018/02/04 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
对Tensorflow中的矩阵运算函数详解
2018/07/27 Python
Python常用特殊方法实例总结
2019/03/22 Python
python 搜索大文件的实例代码
2019/07/08 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
对Django中内置的User模型实例详解
2019/08/16 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
Kipling凯浦林美国官网:世界著名时尚休闲包袋品牌
2016/08/24 全球购物
房地产营销策划方案
2014/02/08 职场文书
yy生日主持词
2014/03/20 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
Python中的变量与常量
2021/11/11 Python
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL
如何用H5实现好玩的2048小游戏
2022/07/23 HTML / CSS