PHP

쇼핑몰 개발시 주문번호 생성 방법

코딩박사 2025. 7. 24. 17:22
반응형

쇼핑몰 개발 시 **주문번호(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;
}

 

반응형