【问题标题】:Random String for transaction code交易代码的随机字符串
【发布时间】:2013-11-19 07:37:09
【问题描述】:

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

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

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

使用 PHP 函数生成它然后检查数据库表中是否已经存在事务代码更好,还是应该创建一个存储过程来执行此操作?你觉得哪个更快?

【问题讨论】:

    标签: php regex database codeigniter stored-procedures


    【解决方案1】:

    您可以在 PHP 中使用 uniqid 来实现此目的

    这样的事情就可以了..

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

    输出:

    TRANSID-528B185A2EC6C
    

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

    【讨论】:

    • 我也可以用存储过程来做到这一点,对吧?你觉得哪个更快?因为生成事务码后,我会检查这个事务码是否已经存在于数据库表中。
    • 这是一个基于 PHP 的函数,与后端无关。该函数根据 UNIX 时间戳生成唯一的字母数字字符串。所以 99.9% 它将是唯一的,您可以直接将此值推送到您的数据库中。
    • 谢谢你赐教... :D
    【解决方案2】:

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

    “SagePay 使用类似样式的字符串作为交易 ID”

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

    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
    

    希望它对未来的人有所帮助:)

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2020-10-04
        • 1970-01-01
        • 2011-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-15
        • 2014-04-08
        • 1970-01-01
        相关资源
        最近更新 更多