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 相关文章推荐
使用bcompiler对PHP文件进行加密的代码
Aug 29 PHP
php中防止伪造跨站请求的小招式
Sep 02 PHP
php中的curl_multi系列函数使用例子
Jul 29 PHP
PHP检测用户是否关闭浏览器的方法
Feb 14 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
Dec 21 PHP
PHP中的访问修饰符简单比较
Feb 02 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
Mar 30 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
Oct 17 PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 PHP
一文看懂PHP进程管理器php-fpm
Jun 01 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中使用Oracle数据库(5)
2006/10/09 PHP
发一个php简单的伪原创程序,配合商城采集用的
2010/10/12 PHP
drupal 代码实现URL重写
2011/05/04 PHP
PHP错误Warning:mysql_query()解决方法
2015/10/24 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
2016/01/08 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
2011/10/31 Javascript
Jquery操作radio的简单实例
2014/01/06 Javascript
使用jquery组件qrcode生成二维码及应用指南
2015/02/22 Javascript
nodejs简单实现中英文翻译
2015/05/04 NodeJs
浅谈JavaScript中的字符编码转换问题
2015/07/07 Javascript
jquery使用on绑定a标签无效 只能用live解决
2016/06/02 Javascript
Angular.js中$apply()和$digest()的深入理解
2016/10/13 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
2017/01/23 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
JavaScript canvas仿代码流瀑布
2020/02/10 Javascript
Vue export import 导入导出的多种方式与区别介绍
2020/02/12 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
2020/11/09 Javascript
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
python自动zip压缩目录的方法
2015/06/28 Python
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
python3 实现调用串口功能
2019/12/26 Python
Pytorch对Himmelblau函数的优化详解
2020/02/29 Python
python元组拆包实现方法
2021/02/28 Python
HTML5移动开发图片压缩上传功能
2016/11/09 HTML / CSS
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
施华洛世奇意大利官网:SWAROVSKI意大利
2018/07/23 全球购物
伦敦新晋轻奢耳饰潮牌:Tada & Toy
2020/05/25 全球购物
2014年综治宣传月活动总结
2014/04/28 职场文书
写给领导的感谢信
2015/01/22 职场文书
MySQL七种JOIN类型小结
2021/10/24 MySQL
Python进程间的通信之语法学习
2022/04/11 Python