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安装全攻略:APACHE
Oct 09 PHP
php 采集书并合成txt格式的实现代码
Mar 01 PHP
第4章 数据处理-php数组的处理-郑阿奇
Jul 04 PHP
三种php连接access数据库方法
Nov 11 PHP
PHP实现在线阅读PDF文件的方法
Jun 17 PHP
从刷票了解获得客户端IP的方法
Sep 21 PHP
smarty高级特性之对象的使用方法
Dec 25 PHP
WordPress的主题编写中获取头部模板和底部模板
Dec 28 PHP
PHP MYSQL实现登陆和模糊查询两大功能
Feb 05 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
Nov 09 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
Apr 18 PHP
php批量修改表结构实例
May 24 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
Terran魔法科技
2020/03/14 星际争霸
php模板之Phpbean的目录结构
2008/01/10 PHP
解析php 版获取重定向后的地址(代码)
2013/06/26 PHP
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
php+js实现的无刷新下载文件功能示例
2019/08/23 PHP
Prototype Template对象 学习
2009/07/19 Javascript
js实现div闪烁原理及实现代码
2014/06/24 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
JS前端笔试题分析
2016/12/19 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
深入理解Vue 单向数据流的原理
2017/11/09 Javascript
基于vue 动态加载图片src的解决方法
2018/02/05 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
整理Python 常用string函数(收藏)
2016/05/30 Python
python爬取w3shcool的JQuery课程并且保存到本地
2017/04/06 Python
python抓取文件夹的所有文件
2018/02/27 Python
python 读取DICOM头文件的实例
2018/05/07 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
python微信公众号之关注公众号自动回复
2018/10/25 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
北京天润融通.net面试题笔试题
2012/02/20 面试题
机械设计及其自动化专业推荐信
2013/10/31 职场文书
销售顾问的岗位职责
2013/11/13 职场文书
师生聚会感言
2014/01/26 职场文书
生日主持词
2014/03/20 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
个人投资合作协议书
2014/10/12 职场文书
工厂清洁工岗位职责
2015/02/14 职场文书
赞美教师的句子
2019/09/02 职场文书
Kubernetes控制节点的部署
2022/04/01 Servers