数码资讯
PHP实现生成独特的会员卡号码
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
在不查询数据库的情况下,每个成员都登录以生成不重复字母数量的成员卡号。
结果如下:
当我们要大量的数据,而数字的数量是有限的,如车牌号码,5位10位ID号,订单号,短网址等,我们可以使用36十六进制数字计算的次数不重复。
查看演示下载源码
我们代表0-z(0123456789abcdefghijklmnopqrstuvwxyz)值分别为0,如字母Z为35。在这种情况下,我想得到一个5位数的号码。最大信息是36, 36×5=60466176的5倍,也就是说,最大的5位数等于10位数:60466176。
为了做陈述,我们假设一个俱乐部将发行一批10张会员卡号。会员卡号码由3个城市号码、5位卡和+ 2位校验码组成,区号用区号表示。如果755代表深圳,5位数的卡号由36个二进制卡号组成。两位校验码是由一定的算法生成的。检查码的目的是验证卡号的有效性。这样,我们生成的10位数字相当于达到大约60000000个成员卡号的最大值,而不是唯一不重复的卡号。
PHP
我们使用PHP进行转换,10到36。
类代码{
密码字典
私人$ DIC =数组(
0 = 1 = > > 0,1,2 = 3 = > > 2',3',4 = 5 = > > 4,5,6 = 7 = > > 6,7',8 = > 8,
9 = > 9,10 = 11 = > > A、B、C 12 = >,13 = >会',14 = 15 = > > e、f、g 16 = >,17 = > H,
18 = 19 = > >我,J,20 = > k,21 = 22 = > > '我',是',23 = n = > >,24 O,25 = 26 = > > 'p',Q,
27 = > R,28 = 29 = > >的'不',30 = 31 = > > U,V,32 = >'w',33 = 34 = > > x,Y,Z 35 = >
);
公共功能encodeid($ int格式= 8美元){
$盘=美元-> DIC;
美元 / dNum转换= 36;/十六进制数
($ ARR =阵);
$循环=真;
当($循环){
$ ARR { } = { bcmod 3美元($ int,$ dNum转换)};
美元($ int,int = bcdiv dNum转换美元,0);
如果($ int = = '0'){
$循环= false;
}
}
如果(计数($ ARR)< $格式)
array_pad(ARR ARR为美元美元美元美元,格式,光盘{ 0 });
返回崩溃('',array_reverse($ ARR));
}
公共功能decodeid($ IDS){
$盘=美元-> DIC;
美元 / dNum转换= 36;/十六进制数
密钥交换
本公司为array_flip美元($盘);
/ /零
美元($ id,id = LTrim美元盘{ 0 });
反转
$id = strrev($id);
$ = 0;
为($我= 0,J = strlen($id);美元美元美元我<< J;i++){
$ V = bcadd(bcmul($本公司{ $id {)
$我}
},bcpow($ dNum转换,我美元,0),0美元),V,0);
}
返回$;
}
}
我们定义了一个代码的类,定义密码字典,对应于0-z数值方法,encodeid($ int,int,美元美元格式)中的参数数量,为格式的数字的长度,如encodeid(123456789,5)123456789号为36位5进制数表示,并decodeid方法($ IDS)36进制数转换成10进制数。
我们可以用这种方法创建一个卡号:
$ =新代码();
card_no美元=美元代码-> encodeid(888888 ,5);
如上所述,我们可以得到一个5位数的卡号,这实际上代表了卡号的会员数是888888(6的8),与实际的转换为5位:0j1vc。
然后,我们将定义城市号码和校验加市数字,校验码是通过一定的算法,在这种情况下,我们使用简单的算法:排名前三的城市数量和五位MD5加密的信用卡号码,然后把前2的MD5值检查代码,这样就得到了两位奇偶校验码的数字背后。
card_pre美元= '755;
card_vc美元= substr(MD5(card_pre美元。美元card_no),0,2);
card_vc = strtoupper美元(美元card_vc);
回声card_pre美元。card_no card_vc美元美元;
在实际应用中,可以通过数据库获得10十六进制数,以确保该数字是唯一的。然后将上面的代码合并生成一个10位的非重复的会员卡号码。
结果如下:
当我们要大量的数据,而数字的数量是有限的,如车牌号码,5位10位ID号,订单号,短网址等,我们可以使用36十六进制数字计算的次数不重复。
查看演示下载源码
我们代表0-z(0123456789abcdefghijklmnopqrstuvwxyz)值分别为0,如字母Z为35。在这种情况下,我想得到一个5位数的号码。最大信息是36, 36×5=60466176的5倍,也就是说,最大的5位数等于10位数:60466176。
为了做陈述,我们假设一个俱乐部将发行一批10张会员卡号。会员卡号码由3个城市号码、5位卡和+ 2位校验码组成,区号用区号表示。如果755代表深圳,5位数的卡号由36个二进制卡号组成。两位校验码是由一定的算法生成的。检查码的目的是验证卡号的有效性。这样,我们生成的10位数字相当于达到大约60000000个成员卡号的最大值,而不是唯一不重复的卡号。
PHP
我们使用PHP进行转换,10到36。
类代码{
密码字典
私人$ DIC =数组(
0 = 1 = > > 0,1,2 = 3 = > > 2',3',4 = 5 = > > 4,5,6 = 7 = > > 6,7',8 = > 8,
9 = > 9,10 = 11 = > > A、B、C 12 = >,13 = >会',14 = 15 = > > e、f、g 16 = >,17 = > H,
18 = 19 = > >我,J,20 = > k,21 = 22 = > > '我',是',23 = n = > >,24 O,25 = 26 = > > 'p',Q,
27 = > R,28 = 29 = > >的'不',30 = 31 = > > U,V,32 = >'w',33 = 34 = > > x,Y,Z 35 = >
);
公共功能encodeid($ int格式= 8美元){
$盘=美元-> DIC;
美元 / dNum转换= 36;/十六进制数
($ ARR =阵);
$循环=真;
当($循环){
$ ARR { } = { bcmod 3美元($ int,$ dNum转换)};
美元($ int,int = bcdiv dNum转换美元,0);
如果($ int = = '0'){
$循环= false;
}
}
如果(计数($ ARR)< $格式)
array_pad(ARR ARR为美元美元美元美元,格式,光盘{ 0 });
返回崩溃('',array_reverse($ ARR));
}
公共功能decodeid($ IDS){
$盘=美元-> DIC;
美元 / dNum转换= 36;/十六进制数
密钥交换
本公司为array_flip美元($盘);
/ /零
美元($ id,id = LTrim美元盘{ 0 });
反转
$id = strrev($id);
$ = 0;
为($我= 0,J = strlen($id);美元美元美元我<< J;i++){
$ V = bcadd(bcmul($本公司{ $id {)
$我}
},bcpow($ dNum转换,我美元,0),0美元),V,0);
}
返回$;
}
}
我们定义了一个代码的类,定义密码字典,对应于0-z数值方法,encodeid($ int,int,美元美元格式)中的参数数量,为格式的数字的长度,如encodeid(123456789,5)123456789号为36位5进制数表示,并decodeid方法($ IDS)36进制数转换成10进制数。
我们可以用这种方法创建一个卡号:
$ =新代码();
card_no美元=美元代码-> encodeid(888888 ,5);
如上所述,我们可以得到一个5位数的卡号,这实际上代表了卡号的会员数是888888(6的8),与实际的转换为5位:0j1vc。
然后,我们将定义城市号码和校验加市数字,校验码是通过一定的算法,在这种情况下,我们使用简单的算法:排名前三的城市数量和五位MD5加密的信用卡号码,然后把前2的MD5值检查代码,这样就得到了两位奇偶校验码的数字背后。
card_pre美元= '755;
card_vc美元= substr(MD5(card_pre美元。美元card_no),0,2);
card_vc = strtoupper美元(美元card_vc);
回声card_pre美元。card_no card_vc美元美元;
在实际应用中,可以通过数据库获得10十六进制数,以确保该数字是唯一的。然后将上面的代码合并生成一个10位的非重复的会员卡号码。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。