【发布时间】:2013-12-05 14:39:57
【问题描述】:
目前我的功能是创建一个随机的唯一发票编号,该编号存储在表单的隐藏字段中
function generate_invoice_number() {
global $wpdb;
$lastVisitor = $wpdb->get_results("SELECT visitorID FROM event_visitors_2014 ORDER BY visitorsID DESC LIMIT 1", ARRAY_A);
$nr_last = $lastVisitor[0]['visitorID'];
$nr = 501 + $nr_last;
$value = sprintf( '%04d', $nr );
$number = 'LEDEXPO'.date('Y').'-'.uniqid().'-'.$value;
return $number;
}
当多人同时使用表单时,我遇到了一个问题,比如 3 个人正在使用他们都生成相同编号的表单。 所以我添加了 uniqid(),所以 $value 可以重复但 $number 应该是唯一的?这是正确的还是有更好的方法?
如何制作测试函数来测试这个函数的唯一性?
问候
【问题讨论】:
-
在插入记录之前是否需要唯一ID。通常最好让数据库创建唯一 ID,然后由程序重新格式化它。
-
使用 UUID(PHP 中的 uniqid)是一个不错的方法。 UUID 被设计为具有极强的抗碰撞能力。
-
@user2310289,是的,我认为在插入之前。我需要最后 3 个数字从 500 开始。我在表单提交时发送了一封电子邮件,这就是为什么我还生成一个 .pdf 发票,其中附有电子邮件的号码。
-
@Idrumm,UUID?需要阅读这个 tx
-
@alex 你已经在使用它们了。这只是
uniqid()给你的不同术语。编辑:我错了。请看这篇帖子stackoverflow.com/questions/3766009/…