+
80
-

php中如何生成指定数量不重复的字符串抽奖码?

php

php中如何生成指定数量不重复的字符串抽奖码?请问代码怎么写?

网友回复

+
0
-
<?php
const HEX_TEMP = "SE1QLBDJK5MHN6O7RG80XZIV3PTFW942ACYU"; // 进制模板:作用缩短数字
const HEX_LEN = 36;

/**
* 进制算法
* @param $num
* @return string
*/
function hexMax($num) {
    $str = "";
    do {
        $remainder = bcdiv($num, HEX_LEN); // 商数
        $quotient = bcmod($num, HEX_LEN); // 余数
        $char = HEX_TEMP[intval($quotient)]; // 字符位置
        $str = $char . $str;
        $num = $remainder;
    } while ($num >= 1);
    return $str;
}
$joinId = 3001; // 参与ID
$courseId = 300; // 活动ID
$baseNum = 1679618; // 基础数值 保证生成进制字符不会低于5位
$len = 100; // 100W数据测试重复性

$arr = [];
for ($i = 0; $i < $len; $i ++) {
    $code = $joinId - $courseId + $baseNum; // 实际抽奖码
    $joinId += 1; // 下一个参与ID

    echo("[输出抽奖] " . hexMax($code)."</br>");
    $arr[] = $code;
}

$runLen = count($arr); // 加入元素总数
$notLen = count(array_unique($arr)); // 去重元素后总数

echo("[测试长度] " . $len."</br>");
echo("[实际长度] " . $runLen."</br>");
echo("[去重长度] " . $notLen."</br>");

我知道答案,我要回答