我想问一下,我正在使用PHP开发一个网站,目前正在寻找更好的方法。
我想为事务代码生成随机字符串。
例如:客户购买了产品,必须有生成的事务代码并将其存储在数据库表中。
使用PHP函数生成它是否更好然后检查数据库表中是否已存在事务代码,还是应该创建一个存储过程来执行此操作?您认为哪个更快?
答案 0 :(得分:1)
您可以在PHP中使用uniqid
这样的事情会做..
<?php
echo "TRANSID-".strtoupper(uniqid()); //Generates a random id every time.
<强>输出:强>
TRANSID-528B185A2EC6C
如果您对此感兴趣,请查看here
答案 1 :(得分:0)
我认为创建随机字符串不会成为速度瓶颈,php可以做到这一点。 uniqid足够好,因为它“基于当前时间,以微秒为单位”。但冲突仍然是可能的(例如,你有多台服务器),但很少。所以只需将其设为unqiue-index,如果插入失败,请重新尝试。
答案 2 :(得分:0)
您可以使用UUID(通用唯一标识符),它可以用于任何目的,从用户身份验证字符串到支付交易ID。
“SagePay对事务ID使用类似的样式字符串”
UUID是一个16字节(128位)的数字。在其规范形式中,UUID由32个十六进制数字表示,显示在由连字符分隔的五个组中,格式为8-4-4-4-12,总共36个字符(32个字母数字字符和四个连字符)。 / p>
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
希望将来帮助某人:)