交易代码的随机字符串


Random String for transaction code

我想问一下,我正在使用PHP开发一个网站,目前正在寻找更好的方法。

我想为交易代码生成随机字符串。

例如:客户购买了一个产品,必须生成交易代码并将其存储在数据库表中。

使用PHP函数生成它,然后检查数据库表中是否已经存在事务代码,或者我应该创建一个执行此操作的存储过程,这样更好吗?你认为哪个更快?

您可以使用UUID(通用唯一标识符),它可以用于任何目的,从用户身份验证字符串到支付交易id。

"SagePay对交易id使用类似风格的字符串"

UUID是一个16位(128位)的数字。在其规范形式中,UUID由32个十六进制数字表示,分五组显示,用连字符分隔,形式为8-4-4-12,共36个字符(32个字母数字字符和4个连字符)。

function generate_uuid() {
    return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
        mt_rand( 0, 0xffff ),
        mt_rand( 0, 0x0C2f ) | 0x4000,
        mt_rand( 0, 0x3fff ) | 0x8000,
        mt_rand( 0, 0x2Aff ), mt_rand( 0, 0xffD3 ), mt_rand( 0, 0xff4B )
    );
}

//调用函数

$transationID = generate_uuid();

一些示例输出如下:

51B4DE29-3B71-4FD2-9E6C-071703E1FF31
3777C8C6-9FF5-4C78-AAA2-08A47F555E81
54B91C72-2CF4-4501-A6E9-02A60DCBAE4C
60F75C7C-1AE3-417B-82C8-14D456542CD7
8DE0168D-01D3-4502-9E59-10D665CEBCB2

希望它能帮助将来的人:)

您可以在PHP中使用uniqid进行

这样的东西就行了。

<?php
echo "TRANSID-".strtoupper(uniqid()); //Generates a random id every time.

输出:

TRANSID-528B185A2EC6C

如果您对此感兴趣,请查看here

我不认为创建随机字符串会成为速度瓶颈,php可以做到这一点。uniqid已经足够好了,因为它"基于以微秒为单位的当前时间"。但是冲突仍然是可能的(例如,你有多个服务器),尽管很少。所以,只要将其设为unqiue索引,如果插入失败,请重试。