
Without querying the database, each member who logs in will generate a membership card number with a unique combination of numbers and letters.
The rendering is as follows:

#When we want to number a huge data, and the number has a limit on the number of digits, For example, a 5-digit license plate number, a 10-digit document number, an order serial number, a short URL, etc., we can use hexadecimal to calculate a unique number that matches the number of digits.
We use 0-Z (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ) to represent values 0-35 respectively, such as the letter Z representing 35. In this case, I want to get a 5-digit number. The maximum amount of information is 36 raised to the fifth power, 36^5 = 60466176, that is, the maximum 5-digit number is equivalent to a decimal number: 60466176.
For the sake of demonstration in this article, we assume that a club issues a batch of 10-digit membership card numbers. The membership card number consists of a 3-digit city number, a 5-digit card number code, and a 2-digit check code. The city number is represented by the area code. For example, 755 represents Shenzhen. The 5-digit card number is composed of a 36-digit card number. The next two check codes are generated through a certain algorithm. The purpose of the check code is to verify the card number. legality. In this case, the 10-digit card number we generate is equivalent to a maximum of more than 60 million membership card numbers, and it is a unique card number that does not repeat.
PHP
We use PHP to convert decimal to hexadecimal.
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;
}
}We define the Code class and first define the password dictionary, that is, the values corresponding to 0-Z. The parameter $int in the method encodeID($int, $format) represents the number, and $format represents the number of digits. Length, for example, encodeID(123456789,5) means converting the number 123456789 into a 5-digit 36-digit number, and the method decodeID($ids) is used to convert the 36-digit number into a decimal number.
We can generate the card number like this:
$code = new Code(); $card_no = $code->encodeID(888888,5);
As above, we can get a 5-digit card number, which actually represents the card number 888888 (6 8s) Member number, but after actual conversion it is a 5-digit number: 0J1VC.
Next, we add the city number and check code. The city number has been defined, and the check code is obtained through a certain algorithm. In this example, we use a simple algorithm: add the first three The city number and the five-digit card number are md5 encrypted, and then the first two digits of the md5 value are taken as the check code, so that the two-digit check code after the number is obtained.
$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;
In actual application, the decimal number can be obtained through the database to ensure that the number is unique, and then the above codes are combined to finally generate a 10-digit non-duplicate membership card number.
The above content is for reference only!
Recommended tutorial: PHP video tutorial
The above is the detailed content of php generates a unique membership number. For more information, please follow other related articles on the PHP Chinese website!