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

发布时间 - 2026-01-11 00:32:34    点击率:

在开发过程中,我们数据表一般都使用自增数字作为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生成唯一数字编号  # 编号自增生成  # php 无限级分类 获取顶级分类ID  # php GUID生成函数和类  # php获取淘宝分类id示例  # php生成随机数的三种方法  # php使用array_rand()函数从数组中随机选择一个或多个元素  # PHP生成不重复随机数的方法汇总  # PHP n个不重复的随机数生成代码  # PHP实现的生成唯一RequestID类完整示例  # 很容易  # 的是  # 下载地址  # 不容易  # 点击查看  # 自定义  # 只看  # 可以根据  # 较短  # 过程中  # 主键  # 表一  # brush  # lt  # Date  # IDCode  # class  # pre 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  如何做网站制作流程,*游戏网站怎么搭建?  微信小程序 require机制详解及实例代码  高端企业智能建站程序:SEO优化与响应式模板定制开发  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  如何在云虚拟主机上快速搭建个人网站?  Python文本处理实践_日志清洗解析【指导】  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何在橙子建站上传落地页?操作指南详解  智能起名网站制作软件有哪些,制作logo的软件?  JavaScript如何实现类型判断_typeof和instanceof有什么区别  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  Laravel观察者模式如何使用_Laravel Model Observer配置  JavaScript如何实现错误处理_try...catch如何捕获异常?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  JavaScript如何实现继承_有哪些常用方法  昵图网官方站入口 昵图网素材图库官网入口  晋江文学城电脑版官网 晋江文学城网页版直接进入  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  济南网站建设制作公司,室内设计网站一般都有哪些功能?  Python高阶函数应用_函数作为参数说明【指导】  Laravel如何记录自定义日志?(Log频道配置)  如何续费美橙建站之星域名及服务?  Laravel怎么在Controller之外的地方验证数据  Python函数文档自动校验_规范解析【教程】  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  JavaScript中的标签模板是什么_它如何扩展字符串功能  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  如何在阿里云部署织梦网站?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  轻松掌握MySQL函数中的last_insert_id()  HTML 中如何正确使用模板变量为元素的 name 属性赋值  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  如何用y主机助手快速搭建网站?  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  Laravel如何实现数据库事务?(DB Facade示例)  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  如何快速搭建二级域名独立网站?