- 정보공유
[PHP] 짧은 접수번호 생성.
// 접수번호 생성
function wz_get_orderno() {
global $g5;
$query = "select max(uq_no) as max_no from {$g5['re_uniqid_table']}";
$bo = sql_fetch($query);
$max_no = $bo['max_no'] ? (int)$bo['max_no'] : 0;
sql_query(" LOCK TABLE {$g5['re_uniqid_table']} WRITE ");
while (1) {
$max_no++;
$max_key = strrev(sprintf('%05d', $max_no));
// 연도2자리 + 순차번호 5 (reverse) + 랜덤1 = 총 8 자리
$key = substr(date('Y', G5_SERVER_TIME), 2) . $max_key . rand(1, 9);
$result = sql_query(" insert into {$g5['re_uniqid_table']} set uq_id = '". $key ."', uq_ip = '". $_SERVER['REMOTE_ADDR'] ."', uq_no = '". $max_no ."' ", false);
if ($result) break; // 쿼리가 정상이면 빠진다.
// insert 하지 못했으면 일정시간 쉰다음 다시 유일키를 만든다.
usleep(10000); // 100분의 1초를 쉰다
}
sql_query(" UNLOCK TABLES ");
return $key;
}
----------------------------------------------------------------
CREATE TABLE `re_uniqid` (
`uq_id` BIGINT(20) UNSIGNED NOT NULL,
`uq_ip` VARCHAR(255) NOT NULL,
`uq_no` BIGINT(20) NOT NULL DEFAULT '0',
PRIMARY KEY (`uq_id`) USING BTREE
)
ENGINE=InnoDB
;