쇼핑몰 개발시 주문번호 생성 방법
쇼핑몰 개발 시 **주문번호(order number)**는 중요한 고유 식별자입니다.
사용자의 주문을 정확하게 구분하고 추적해야 하며, 중복 없이 **유일(unique)**해야 하고, 필요시에는 정렬이나 조회, 추적이 쉬운 형태여야 합니다.
1. 타임스탬프 기반 + 고유값 조합 (실무에서 가장 흔함)
ex) 20250722-153045-00123 또는 ORD20250722153045XYZ
예시
- ORD20250722102401A3F7
- 20250722-102401-0001
- 20250722102401 + user_id + random_string
장점
- 시간순 정렬 가능
- 중복 가능성 거의 없음
- 개발이 쉽고 디버깅이나 추적이 쉬움
단점
- 길이가 길어질 수 있음
PHP 예제
function generateOrderNumber($userId = null) {
$date = date('YmdHis'); // 20250722102401
$rand = strtoupper(substr(md5(uniqid(rand(), true)), 0, 4)); // A3F7
return 'ORD' . $date . ($userId ? $userId : '') . $rand;
}
2. UUID 방식 (범용 고유 식별자)
ex) 550e8400-e29b-41d4-a716-446655440000
- 장점 : 고유성 100%, 중복 위험 없음
- 단점 : 사람이 읽기 어렵고 너무 김 (비즈니스 노출에 불편)
PHP 예제
function generateUUID() {
return strtoupper(bin2hex(random_bytes(16))); // 또는 ramsey/uuid 패키지 사용
}
3. 데이터베이스 자동 증가 ID 사용
ex) 10001, 10002...
- 장점 : 단순하고 연속성 있음
- 단점 : 보안 취약 (예상 가능)
동시 처리 시 중복 주의 필요 (분산 환경 부적합)
→ 보통 단독으로는 사용 안 하고 날짜나 접두어를 붙여 사용합니다.
PHP 예제
$orderId = 'ORD' . str_pad($lastInsertId, 6, '0', STR_PAD_LEFT); // ORD000123
4. 쇼트 코드 방식 (짧고 간결한 랜덤 문자열)
ex) A3F7D9, XZ8921
- 장점 : SMS, UI 등에 노출이 쉬움
- 단점 : 충돌 가능성 있음 → 중복 체크 필요
PHP 예제
function generateShortOrderCode($length = 6) {
return strtoupper(substr(bin2hex(random_bytes(ceil($length / 2))), 0, $length));
}
추천 조합 (실전용)
ex) ORD20250722-00001, ORD240722A3F7, O20250722UID
PHP 예제
function createOrderNo($userId = null) {
$date = date('Ymd'); // 날짜 기반
$rand = strtoupper(substr(uniqid('', true), -4)); // 랜덤 4자리
return 'ORD' . $date . ($userId ? str_pad($userId, 5, '0', STR_PAD_LEFT) : '') . $rand;
}