9位唯一码

碰到个需求:预生成唯一码
要存数据库,使用唯一索引
唯一码需要随机生成

这里我利用了自增id,首先初始化一个固定的起始值initNumber,然后每次生成的时候从数据库中取出当前有多少个唯一码totalNum,最后是需要生成唯一码的数量count
我就测了单表2000w条数据没问题

$initNumber = 123456789;
$totalNum = 10000; // 数据库查询获得
$count = 8888;  //需要生成的唯一码数量,用户输入
for ($i = 0; $i < $count; $i++){
	caseNum($initNumber + $i + $count);
}

代码如下

function caseNum(string $str): string
{
	$arr1 = [5, 1, 3, 4, 9, 6, 7, 2, 8, 0];
	$arr2 = [0, 4, 3, 2, 7, 1, 8, 9, 6, 5];
	$arr3 = [9, 6, 3, 2, 8, 7, 4, 0, 5, 1];
	$arr4 = [2, 6, 5, 9, 7, 8, 4, 0, 3, 1];
	$arr5 = [6, 9, 3, 2, 0, 8, 4, 7, 5, 1];
	$newStr = '';

	for ($i = 0; $i < 9; $i++) {
		$flag = ((int) $str[$i] + (int) $str[8]) % 10;
		switch ($i) {
		case 0:
		case 1:
			$newStr .= $arr1[$flag];
			break;
		case 2:
		case 3:
			$newStr .= $arr2[$flag];
			break;
		case 4:
		case 5:
			$newStr .= $arr3[$flag];
			break;
		case 6:
		case 7:
			$newStr .= $arr4[$flag];
			break;
		case 8:
			$newStr .= $arr5[$flag];
		}
	}

	return $newStr;
}

害,后面又改了一版

function caseNum(int $number, int $index): int
{
    $arr = [
        [1, 1, 2, 3, 5],
        [2, 3, 5, 7, 11],
        [1, 3, 5, 7, 9],
        [2, 4, 6, 8, 10],
    ];

    $index %= count($arr[0]);
    $random = random_int(1, 25) % 4 ;

    $number += $arr[$random][$index];

    return $number;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值