?

我们将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全栈开发教程

全栈 100W+

主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门

玉女心经-web前端开发教程

入门 50W+

主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门

天龙八部-实战开发教程

实战 80W+

主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习

php 生成会员卡号,PHP生成独一会员卡号相关推荐

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

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

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

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

  3. 微信公众号怎么生成带粉丝关注统计的渠道二维码

    关于微信公众号在线生成带粉丝关注统计的渠道二维码,第三方工具微号帮提供了渠道二维码生成功能实现,可以为公众号生成带粉丝关注统计的渠道二维码,可以生成多个不同的渠道二维码,每个渠道二维码都可以单独统计粉 ...

  4. java代码:双色球号随机生成(极其简洁!)

    https://blog.csdn.net/qq_40677004/article/details/79699270 原 java代码:双色球号随机生成(极其简洁!) 2018年03月26日 15:5 ...

  5. 微信公众号怎么生成能追踪效果的二维码?

    微号帮平台微信渠道二维码功能介绍:为了满足用户渠道推广分析的需要,微信公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,微信公众号可以接收到事件推送. 现在 ...

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

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

  7. 正阅读微信小说分销系统-视频教程-6.生成推广文章-代理商必看-没有公众号也能推哦!

    大家最烦的就是,我没有公众号. 正阅读微信小说分销系统-视频教程-6.代理商必看-没有公众号也能推哦! 我荐文学-原创.授权文学分销平台.教程系列. 个人的也没有 我不会弄, 我不会申请公众号 能不能 ...

  8. java订单编号工具类_[idmiss-common] Java 工具类之- 顺序订单号的生成

    1.前言 这是我写的工具类之一:根据日期生成唯一顺序订单号. 用Java 配合 Redis 实现包含日期的顺序订单号的生成, 效率可以达到 2500+/s 1000W+/h 个 . 2.基本介绍 框架 ...

  9. ## 根据身份证号自动生成年龄以及性别

    根据身份证号自动生成年龄以及性别 <div class="form-group"><label class="col-sm-3 control-labe ...

  10. 判断身份证号,根据身份证号自动生成出生日期

    判断身份证号,根据身份证号自动生成出生日期 idCodeValid(rule, value, callback) => {let reg = /(^[1-9]\d{5}(18|19|([23]\ ...

最新文章

  1. python turtle画圣诞树-Python画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
  2. Yii2 Pjax的简单使用
  3. 多线程与高并发(五):强软弱虚四种引用以及ThreadLocal的原理与源码
  4. Linux内核源码目录说明
  5. abortonerror_如何在多项目目录顶层的Android Gradle Plugin中禁用lint abortOnError
  6. ETDM:基于显式时间差分建模的视频超分辨率(CVPR 2022)
  7. 问卷调查 asp 源码一起研究
  8. 马斯克称新一代Roadster就有望在2023年开始交付
  9. hdu1247 字典树
  10. IE6和IE7的line-height和现代浏览器不一致的问题
  11. microsoft store 安装包_LOL英雄联盟手游官方安装包
  12. 苹果Pro安装win10鼠标不能用的问题
  13. 计算机电缆电阻值,一文看懂5个电线电缆电阻检测方法
  14. 电视游戏大厅现状:“渠道为王”遭遇水土不服
  15. iOS开发-代替UDID被弃用和UUID使用缺陷的解决方案
  16. 大厂程序员都会的分布式RPC框架,直接无私打包分享,手慢无
  17. 源程序、目标程序、汇编程序、编译程序、解释程序
  18. 使用Windows XP 的放大镜、屏幕和键盘(转)
  19. Unity 开发 Hololens2 MR应用程序
  20. java里%是什么_java里.是什么意思?

热门文章

  1. 安全修复之Web——Spring Framework 远程代码执行漏洞
  2. 6亿视频号的8种私域流量变现模式
  3. 过敏体质也会遗传给孩子,孕期妈妈应该尽早预防
  4. 全国计算机一级第七套试题及答案,计算机一级考试第七套试卷及答案.doc
  5. 搜索引擎使用小技巧(通配符)
  6. github博客迁移——图床搭建
  7. 阿里开源的10个神级项目
  8. 活捉那只抢算力的谷歌员工!挤占计算资源?博弈论或可破解数据中心“囚徒困境”...
  9. Linux检查图形化界面是否安装
  10. 编译linux源码报错,记录一次Linux内核源码编译实验