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

5年以前  |  阅读数:1191 次  |  编程语言:PHP 

在开发过程中,我们数据表一般都使用自增数字作为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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
贪吃蛇
文件下载
双位运算符
发送邮件
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
提取后缀名
年的日历图
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例