由于我是Web开发的新手,我已经创建了一个在线预订系统,并且我有一个交易ID,客户可以取消他们的预订。我已经用随机字符和字母创建了一个交易ID但是我想创建自定义ID 例如: 2014-09-000010-PM ,但我不知道在谷歌搜索什么教程。谢谢您的帮助。 顺便说一下,这是我的随机字符和字母代码。
function createRandomPassword() {
$chars = "abcdefghijkmnopqrstuvwxyz023456789";
srand((double)microtime()*1000000);
$i = 0;
$pass = '' ;
while ($i <= 7) {
$num = rand() % 33;
$tmp = substr($chars, $num, 1);
$pass = $pass . $tmp;
$i++;
}
return $pass;
}
$confirmation = createRandomPassword();
?>
答案 0 :(得分:0)
您可以使用date()函数。
http://php.net/manual/en/function.date.php
将其格式化为您对日期的喜好,如果您想要添加随机部分或其他任何内容,请在字符串后附加变量+ =&#39;无论什么&#39 ;;
还要确保您的ID安全无法预测。
答案 1 :(得分:0)
如果您希望ID的一部分是人类可读的,您可以使用日期函数,如另一个答案中所述。但是,正如我在评论中所说,如果攻击者可以预测(即猜测)您的交易ID,攻击者可以执行取消或更改其他人预订等操作。您应该使用无法预测的交易ID。因此,基于日期的ID本身就很危险。您需要ID或其中的一部分才能真正随机。
srand()函数不一定这样做。它的工作是生成一系列满足随机性统计测试的数字,而不是不可预测性。但是,PHP确实有一种方法可以生成(可能)加密安全的随机数。看看:http://php.net/manual/en/function.openssl-random-pseudo-bytes.php
答案 2 :(得分:0)
利用现有代码。例如,UUID是唯一的,版本1 UUID包含时间戳,该节点可用于添加随机性(或只能检索的信息哈希。)它也是非常通常重新实现,所以你可以找到很多教程。请记住,您需要能够创建uuid,和能够稍后从字符串表示中提取信息。
或者您可以使用Rhumsaa\Uuid包(或任何类似的完整库)来完成初始化,翻译uuid以及关注代码真正需要做的所有工作。
use Rhumsaa\Uuid
// Uuid casts itself as a string whenever used as a string
$myTransactionId = Uuid::uuid1( $myHexNodeString, time() );
$uuidObject = Uuid::fromString( 'e886e43a-30b5-11e4-8751-7f0000014a23' );
// Creates a PHP DateTime object
// @see http://php.net/manual/en/class.datetime.php
$timestamp = $uuid->getDateTime();
// 2014-08-31T02:24:18+00:00
$myRetrievedHexNodeString = $uuid->getNodeHex()
// 7f0000014a23