php如何根据id生成10位不重复数字跟字母混合字符串

169 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 4 月更文挑战」的第 29 天,点击查看活动详情

下面是一个生成10位不重复数字和字母混合字符串的 PHP 示例代码:

<?php
function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    
    while (strlen($randomString) < $length) {
        $randomChar = $characters[rand(0, $charactersLength - 1)];
        if (strpos($randomString, $randomChar) === false) {
            $randomString .= $randomChar;
        }
    }
    
    return $randomString;
}

$id = 123; // 替换为你的ID值
$uniqueString = generateRandomString() . $id . generateRandomString(10 - strlen($id));
echo $uniqueString;
?>

这个示例代码中,我们定义了一个 generateRandomString 函数,用于生成指定长度的随机字符串。在 generateRandomString 函数中,我们使用了包含数字和字母的字符集,并在每次生成字符时检查生成的字符串中是否已经存在该字符,以确保生成的字符串不重复。

在主程序中,我们将生成的随机字符串与 ID 值进行拼接,以确保最终生成的字符串长度为 10 位。你可以将 $id 变量替换为你实际的 ID 值。

运行以上代码,你将获得一个由数字和字母混合组成的、长度为 10 位的不重复字符串。每次运行都会生成不同的字符串。注意,这种方法并不能保证生成的字符串绝对不重复,但在实践中很可能生成的字符串重复的概率非常低。

如果你需要生成的字符串在一段时间内是唯一且不重复的,你可以使用更强大的方法,例如基于时间戳和加密哈希。

function generateUniqueString($id) {
    $timestamp = time();
    $randomString = bin2hex(random_bytes(4)); // 生成4字节的随机字节串
    $stringToHash = $id . $timestamp . $randomString;
    $hash = hash('sha256', $stringToHash); // 使用SHA-256哈希算法生成哈希值
    $uniqueString = substr($hash, 0, 10); // 提取前10位作为最终字符串

    return $uniqueString;
}

$id = 123; // 替换为你的ID值
$uniqueString = generateUniqueString($id);
echo $uniqueString;

在这个示例中,我们使用了时间戳和随机字节串来生成一个唯一的字符串。首先,我们获取当前的时间戳,并生成一个随机字节串,长度为4字节。然后,将 ID 值、时间戳和随机字节串拼接在一起,并使用 SHA-256 哈希算法生成一个哈希值。最后,我们从哈希值中提取前10位作为最终的唯一字符串。

这种方法可以在一段时间内生成唯一的字符串,并且在不同的时间生成的字符串也会不同。请注意,由于使用了随机字节串和哈希算法,生成的字符串是不可逆的,并且很难通过字符串推导出原始的 ID 值和时间戳。

运行以上代码,你将获得一个唯一且不重复的、长度为 10 位的字符串。每次运行生成的字符串都会不同。