您要做的是通过创建四个一组的字母和数字的混合来为您的硬币创建 20 个字符的唯一标识符。
PHP 和 MySQL 都提供了一个生成随机字符串的函数,尽管略有不同。这样的字符串通常称为UUID(通用唯一标识符)。这实际上是一个标准,因为这是许多系统的要求。
PHP 函数uniqid()
将生成一个 13 或 23 个字符的随机字符串;基于时间戳。这是一个示例运行:
print uniqid(); # 151cfeeba8b833
print uniqid('', true); # 51cfeeba8b83f6.48956452
现在,这并没有给出您正在寻找的格式的数字。但是,手册页上有一条注释,它提供了一个方便的功能:
function v4() {
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
// 32 bits for "time_low"
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
// 16 bits for "time_mid"
mt_rand(0, 0xffff),
// 16 bits for "time_hi_and_version",
// four most significant bits holds version number 4
mt_rand(0, 0x0fff) | 0x4000,
// 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1
mt_rand(0, 0x3fff) | 0x8000,
// 48 bits for "node"
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
}
这被称为 v4,因为它是 UUID 规范的“版本 4”。这是该函数的示例字符串edd08995-9d48-4e04-8e42-5270377c331f
。
MySQL 有一个内置的uuid 函数,它做同样的事情:
mysql> SELECT UUID();
-> '6ccd780c-baba-1026-9564-0040f4311e29'
您可以使用它来简化代码,然后您所拥有的就是:
<?php
$q = "INSERT INTO `Donates` (`serial`, `Coins`) VALUES (UUID(), '500')";
mysql_query($q, $link) or die(mysql_error());
?>
您应该使用这些mysqli_*
函数,因为旧的 mysql 函数将从 PHP 中删除。有关使用哪个 API 的讨论,请参阅手册中的此页面。
这是您的示例mysqli
:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "Error: (".$mysqli->connect_errno.") ".$mysqli->connect_error;
}
$q = "INSERT INTO `Donates` (`serial`, `Coins`) VALUES (UUID(), '500')";
$result = $mysqli->query($q);
if (!$result) {
echo "Error: ".$mysqli->error;
}
?>