如何创建自定义事务ID php


How to create custom transaction ID php

由于我是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();
?>

如果您希望ID的一部分是可读的,可以使用日期函数,如另一个答案中所述。然而,正如我在评论中所说,如果攻击者能够预测(猜测)您的交易ID,则攻击者可以执行取消或更改他人的预订等操作。您应该使用无法预测的事务ID。因此,一个基于日期的ID本身是危险的。你需要ID,或者它的一部分,是真正随机的。

srand()函数不一定能做到这一点。它的工作是生成一系列满足随机性而非不可预测性统计测试的数字。然而,PHP确实有一种生成随机数的方法,这种方法(可能)在加密方面是安全的。看看:http://php.net/manual/en/function.openssl-random-pseudo-bytes.php

您可以使用date()函数。

http://php.net/manual/en/function.date.php

根据日期设置格式,如果你想添加一个随机部分或其他内容,可以在字符串后面添加变量+="whatever";

还要确保你的身份证是安全的和不可预测的。

利用现有代码。例如,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