You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成无重复且无连续数字序列的4位随机PIN码?

生成无重复且无连续数字的4位PIN码解决方案

原代码仅实现了无重复数字的功能,但未校验数字间是否存在连续序列(如1和2、3和2这类差值为1的情况)。以下是修改后的代码,可同时满足无重复和无连续数字两个要求:

function randomUniqueNonConsecutivePin() {
    do {
        // 生成1-9的无重复4位数字数组
        $numbers = range(1, 9);
        shuffle($numbers);
        $pinArray = array_slice($numbers, 0, 4);
        
        // 检查序列中是否存在连续数字
        $hasConsecutive = false;
        for ($i = 0; $i < 3; $i++) {
            if (abs($pinArray[$i] - $pinArray[$i+1]) === 1) {
                $hasConsecutive = true;
                break;
            }
        }
    } while ($hasConsecutive);
    
    // 将数组转为4位数字字符串
    return implode('', $pinArray);
}

// 生成并输出符合要求的PIN码
$validPin = randomUniqueNonConsecutivePin();
echo $validPin;

代码逻辑说明

  • 使用do-while循环:只要生成的序列存在连续数字,就重新生成,直到得到符合要求的结果
  • 连续数字判断:通过abs($pinArray[$i] - $pinArray[$i+1]) === 1校验相邻数字的差值绝对值是否为1,覆盖正序和逆序的连续情况(如2和3、3和2)
  • 字符串转换:用implode()替代原代码的循环拼接,更简洁高效

此方案效率足够,因为1-9中选4个无重复数字的组合里,不符合连续条件的占比极低,循环次数不会过多。

内容的提问来源于stack exchange,提问作者Rahumathulla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:00:22