PHP生成带有规范的唯一代码

时间:2018-03-23 17:05:01

标签: php random

我试图编写PHP函数来生成一个3个字母的代码。第一个字母必须是X,Y或Z,它必须遵循以下格式:XAA,XAB,XAC ....直到XAW然后XBA,XBB,XBC ....直到XBW然后XCA,XCB ......等

当' X'完了,然后是YAA,YAB,等...... 当' Y'完成了ZAA,ZAB等等......

此代码的第2和第3个字母不能是X,Y或Z.

我从数据库中获取最后生成的代码。

这是我到目前为止所看到的......对最终条件感到困惑:

$valid = str_split("ABCDEFGHIJKLMNOPQRSTUVW");

if($result->num_rows() < 1)
    $last_code = 'XAA';
else {
    $result = $result->row_array();
    $last_code = $result['employee_code'];
}

$arr = str_split($last_code);

$first  = $arr[0];
$second = $arr[1];
$third  = $arr[2];

if($first == 'X') {

} else if($second == 'Y') {

} else if($third == 'Z') {

}

2 个答案:

答案 0 :(得分:0)

逻辑非常简单,因为PHP具有以下机制:

$letter = 'a';
echo ++$letter; // echoes 'b'

这在this question

中很好

现在您需要确保自己是代码的边界:

  1. 如果第二个和/或第三个字母为'W',则会被'A'替换,前一个字母会增加。
  2. 如果第一个字母为'Z'且应递增,则算法无法生成新代码。
  3. 在所有其他情况下,只需增加最后字母即可。

    if($result->num_rows() < 1) {
        //If no code exists the new code is XAA, not the old one.
        return 'XAA';
    }
    
    $result = $result->row_array();
    $last_code = $result['employee_code'];
    $new_code = $old_code;
    
    if ($old_code[2] === 'W') {
        if ($old_code[1] === 'W') {
            if ($old_code[0] === 'Z') {
                throw new Exception('All codes used! Add new algorithm');
            } 
            $new_code[0] = ++$old_code[0];
            $new_code[1] = 'A';
        } else {
            $new_code[1] = ++$old_code[1];
        }
        $new_code[2] = 'A';
    } else {
        $new_code[2] = ++$old_code[2];
    }
    return $new_code;
    

    前两个if条件处理边界1,而第三个if条件处理边界2. else块处理字母的增量。

答案 1 :(得分:0)

我编写了一个更简单的逻辑:

<video #media [vgMedia]="media" [src]="video.src" id="modalPlayer" 
    "preload="auto" [poster]="video.poster">
</video>