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 auth_http类库进行身份效验
Mar 19 PHP
PHP 程序员应该使用的10个组件
Oct 31 PHP
php与XML、XSLT、Mysql的结合运用实现代码
Nov 19 PHP
处理单名多值表单的详解
Jun 08 PHP
php生成zip压缩文件的方法详解
Jun 09 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
Jun 21 PHP
php中字符集转换iconv函数使用总结
Oct 11 PHP
php+ajax实现无刷新分页的方法
Nov 04 PHP
php生成年月日下载列表的方法
Apr 24 PHP
php 读取文件夹下所有图片、文件的实例
Oct 17 PHP
php libevent 功能与使用方法详解
Mar 04 PHP
YII2框架中behavior行为的理解与使用方法示例
Mar 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
PHP与MongoDB简介|安全|M+PHP应用实例详解
2013/06/17 PHP
深入Apache与Nginx的优缺点比较详解
2013/06/17 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
javascript日期对象格式化为字符串的实现方法
2014/01/14 Javascript
jQuery toggleClass应用实例(附效果图)
2014/04/06 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
浅谈js的url解析函数封装
2016/06/28 Javascript
javaScript日期工具类DateUtils详解
2017/12/08 Javascript
JavaScript显式数据类型转换详解
2019/03/18 Javascript
vue响应式系统之observe、watcher、dep的源码解析
2019/04/09 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
vue父子组件的通信方法(实例详解)
2019/11/10 Javascript
python实现定时播放mp3
2015/03/29 Python
python使用mailbox打印电子邮件的方法
2015/04/30 Python
Python绑定方法与非绑定方法详解
2017/08/18 Python
python 全局变量的import机制介绍
2017/09/07 Python
3种python调用其他脚本的方法
2020/01/06 Python
python基于property()函数定义属性
2020/01/22 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
详解Python yaml模块
2020/09/23 Python
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
俄罗斯香水和化妆品网上商店:NOTINO.ru
2019/12/17 全球购物
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
澳大利亚商务邀请函
2014/01/17 职场文书
电脑专业个人求职信范文
2014/02/04 职场文书
黄河象教学反思
2014/02/10 职场文书
财务年终工作总结大全
2019/06/20 职场文书
《天使的翅膀》读后感3篇
2019/12/20 职场文书
pandas中pd.groupby()的用法详解
2022/06/16 Python