在不查询数据库的情况下,每个会员登录进来会生成一个数字字母组合不重复的会员卡号。

效果图如下:

当我们要将一个庞大的数据进行编号时,而编号有位数限制,比如5位的车牌号、10位的某证件号码、订单流水号、短网址等等,我们可以使用36进制计算出符合位数的不重复的编号。

我们将0-Z(0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ)分别代表数值0-35,如字母Z代表35。这样的话我要得到一个5位的编号,最大信息量就是36的5次方了,36^5 = 60466176,即最大的5位编号相当于10进制的数字:60466176。

本文中为了做演示,我们假定某俱乐部发放一批10位的会员卡号,会员卡号由3位城市编号 5位卡号编码 2位校验码组成。城市编号用区号表示,如755代表深圳,5位卡编号则由36进制的卡编号组成,后面两位校验码则是通过一定的算法生成的,校验码的用处是可以验证卡号的合法性。这样的话,我们生成的10位卡号相当于最大能满足6000多万会员卡号,并且是不重复唯一的卡号。

PHP

我们使用PHP进行进制转换,10进制转36进制。class Code { //密码字典 private $dic = array( 0=>'0', 1=>'1', 2=>'2', 3=>'3', 4=>'4', 5=>'5', 6=>'6', 7=>'7', 8=>'8', 9=>'9', 10=>'A', 11=>'B', 12=>'C', 13=>'D', 14=>'E', 15=>'F', 16=>'G', 17=>'H', 18=>'I',19=>'J', 20=>'K', 21=>'L', 22=>'M', 23=>'N', 24=>'O', 25=>'P', 26=>'Q', 27=>'R',28=>'S', 29=>'T', 30=>'U', 31=>'V', 32=>'W', 33=>'X', 34=>'Y', 35=>'Z' ); public function encodeID($int, $format=8) { $dics = $this->dic; $dnum = 36; //进制数 $arr = array (); $loop = true; while ($loop) { $arr[] = $dics[bcmod($int, $dnum)]; $int = bcdiv($int, $dnum, 0); if ($int == '0') { $loop = false; } } if (count($arr) < $format) $arr = array_pad($arr, $format, $dics[0]); return implode('', array_reverse($arr)); } public function decodeID($ids) { $dics = $this->dic; $dnum = 36; //进制数 //键值交换 $dedic = array_flip($dics); //去零 $id = ltrim($ids, $dics[0]); //反转 $id = strrev($id); $v = 0; for ($i = 0, $j = strlen($id); $i < $j; $i ) { $v = bcadd(bcmul($dedic[$id { $i } ], bcpow($dnum, $i, 0), 0), $v, 0); } return $v; } }

我们定义Code类,先定义密码字典,即0-Z分别对应的数值,方法encodeID($int, $format)中参数$int表示数字,$format表示位数长度,比方encodeID(123456789,5)表示将数字123456789转换成5位的36进制编号,而方法decodeID($ids)用于将36进制的编号转换成10进制的编号。

我们可以这样生成卡号:$code = new Code(); $card_no = $code->encodeID(888888,5);

如上,我们就可以得到一个5位的卡编号,它实际代表着卡号是888888(6个8)的会员编号,而实际进行转换后是5位编号:0J1VC。

接着,我们将城市编号和校验码加上,城市编号是已经定义好的,校验码则通过一定的算法取得,本例中,我们使用简单的算法:将前三位城市编号和五位卡编号进行md5加密,然后取md5值的前2位作为校验码,这样就得到了编号后面的两位校验码。$card_pre = '755'; $card_vc = substr(md5($card_pre.$card_no),0,2); $card_vc = strtoupper($card_vc); echo $card_pre.$card_no.$card_vc;

实际应用中,可以通过数据库得到10进制的编号,保证编号唯一,再将上述代码组合,最终生成一个10位的不重复的会员卡号。

以上内容仅供参考!

推荐教程:PHP视频教程

php 生成不重复的会员卡号,php生成一个不重复的会员号相关推荐

  1. php 生成会员卡号,PHP生成独一会员卡号

    ? 我们将0-Z(0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ)分别代表数值0-35,如字母Z代表35.这样的话我 要得到一个5位的编号,最大信息量就是36的5次方了,36 ...

  2. PHP生成一个不重复的会员号,php生成一个不重复的会员号

    在不查询数据库的情况下,每个会员登录进来会生成一个数字字母组合不重复的会员卡号. 效果图如下: 当我们要将一个庞大的数据进行编号时,而编号有位数限制,比如5位的车牌号.10位的某证件号码.订单流水号. ...

  3. 【PHP】php生成一个不重复的数字(订单号、会员号)

    1.目的:利用php的do .. while 生成一个不重复的字符串或者数组,比如(订单号.会员号) 2.不废话,代码来: $repeat_order = array();do{$ordersn = ...

  4. 50万数据生成6位数不重复字符串_JAVA技术分享:单号的生成

    一.订单号生成的原则: 1.全局的唯一性 2.自增长 3.长度的要求 4.具有一定的可读性 5.保密,不可推测性 6.效率性 二.实现方案 常见的ID生成策略. 1. 数据库自增长序列或字段 2. U ...

  5. 快速订单号生成(两秒左右10万条数据无重复)

    订单号生成 在开发当中我想大部分程序员都会做商城类的项目,其中订单号是一个相对比较重要的数据,在用户下单是不允许有重复订单生成的. 我给大家提供了一个生成订单的方法,希望对您有所帮助!!!!!!!!! ...

  6. php怎么添加会员卡,怎么在微信公众号中添加一个会员卡领取功能

    怎么在微信公众号中添加一个会员卡领取功能 发布时间:2020-12-09 16:06:27 来源:亿速云 阅读:129 作者:Leah 这篇文章将为大家详细讲解有关怎么在微信公众号中添加一个会员卡领取 ...

  7. 订单号怎样生成才能好用又好看,难倒了20多位产品经理

    https://www.jianshu.com/p/3ef577eaacac 1.三个真实的案例 案例1:最近面试的将近20位产品经理里面,我都会问一道问题:请您为我公司的订单系统设计一套订单号的生成 ...

  8. 热门流量主小程序王者重复空白名昵称头像生成系统开发

    热门流量主小程序王者重复空白名昵称头像生成系统开发 重复名空白名贵族居中你想要的名字都能用 个性昵称生成 贵族头像框 文章系统解锁查看 个人中心其他小程序 积分任务系统 前端// 重复名 首页 空白名 ...

  9. 订单号的生成规则和不同生成策略-总结

    订单号的不同生成策略-总结 一. 订单命名的几种规则 不重复:订单号的唯一行 安全性:订单编号中不要透露任何和公司有关的信息,不要使用流水号,容易暴露公司的运营情况 不要使用大规模随机码:随机编码可以 ...

  10. python生成订单号或生成任意序列

    python生成订单号或生成任意序列 示例代码: import time# 生成订单号 def get_order_code():# 年月日时分秒+time.time()的后7位order_no = ...

最新文章

  1. 基于OpenCV的位姿估计
  2. 什么是错误的幻数错误?
  3. Linux更新了源无法打开终端,在Deepin系统中检测不到升级的解决,需要切换系统源...
  4. beanstalkd php扩展,PHP操作Beanstalkd队列(1)安装与基础
  5. ESP8266的网状网络(Mesh Network)
  6. 数字原生,创新生长|企业如何打造数字创新的“飞天梦”?
  7. android tcp tcp阻塞 线程不运行,Android tcp优化
  8. 程序设计和c语言ppt,程序设计和C语言.ppt
  9. Linux网络编程组播测试代码
  10. Ubuntu16.4 将python3.5重新切换为python2.7后,pip运行出错
  11. 卷积神经网络CNN如何训练?
  12. MySQL引擎详解(一)——引擎基本原理和操作
  13. CSDN如何获取积分
  14. MacOS Big Sur 11.5.1 (20G80) OC 0.7.1 / Cl 5138 / PE 三分区原版黑苹果镜像
  15. 转dmg 到iso。。。
  16. 香橙派OrangePi Zero开发板的WiFi连接测试
  17. Ubuntu16.04拨号上网
  18. 常规恢复_不完全恢复_丢失控制文件
  19. 使用EasyPoi导入导出Excel
  20. 设置什么加快计算机启动速度,如何设置CPU加速对电脑启动速度的方法(更改CPU数量可开机提速)...

热门文章

  1. office 2010 安装
  2. a4如何打印双面小册子_a4如何打印双面小册子
  3. VC 2012 visualstudio的项目属性表 .props文件
  4. 婴幼儿体重在线计算机,宝宝身高体重标准计算器
  5. 计算机专业需要外语口试,计算机专业英语词汇大全,计算机专业必读英语词汇!...
  6. Redis 如何使用 Bitmap
  7. DB2入门(5)——DB2配置文件
  8. r语言实现自相关分析和偏相关分析
  9. php 限定字符长度,PHP中字符串的最大长度是多少?
  10. 联想ThinkPad E420安装7450M的显卡驱动后进入不了系统,试了4个系统都不..