php 워드프레스 개발

절대 중복되지 않는 난수+문자열 조합

최혁재 2024. 7. 29. 18:05

개발하다 보면, 중복되지 않는 고유 코드를 생성해야 하는 경우가 많습니다. 예를 들어, 사용자의 할인 코드, 이벤트 초대 코드 등 다양한 상황에서 필요합니다. 이번 포스팅에서는 PHP와 MySQL을 사용하여 중복되지 않는 6자리 난수+문자열 조합 코드를 생성하는 방법을 소개하겠습니다.

문제점

처음에는 현재 시간에 user_id 값을 더해서 코드를 생성하려 했지만, 코드가 6자리로 제한되어 있어 사용자가 100,000명을 넘어가면 중복의 위험이 높아질 수 있습니다. 따라서 이 방법은 적합하지 않다고 판단했습니다.

요구 사항

  • 생성되는 코드는 6자리여야 합니다.
  • 코드에는 대문자 알파벳과 숫자가 포함되어야 합니다.
  • 생성된 코드는 데이터베이스에 저장된 기존 코드와 중복되지 않아야 합니다.

코드 설명

아래는 중복되지 않는 코드를 생성하는 PHP 함수입니다. 이 함수는 MySQL 데이터베이스와 연동하여, 생성된 코드가 중복되지 않는지 확인하고, 중복되지 않을 때까지 새로운 코드를 생성합니다.

중복될 확률을 계산해보면

가능한 모든 코드의 개수

코드는 6자리로, 3자리의 알파벳 대문자와 3자리의 숫자로 구성됩니다. 따라서 가능한 조합의 총 개수는 다음과 같습니다:

  • 알파벳: 26 글자
  • 숫자: 10 글자

26X26X26X10X10X10X  = 17,576,000

17,576,000 분의 1 확률로 중복이 된다 

이경우의 수 마저 제거하기 위해 반복문을 통해 검사한뒤 중복되지 않을 때 까지 새로운 코드를 생성한다

 

해결 방법

 

매우 낮은 확률이므로, 대부분의 경우에서 코드가 중복되지 않고 고유하게 생성될 것입니다. 만약 코드가 중복된다면, while 루프가 한 번 더 동작하여 새로운 고유 코드를 생성하게 됩니다.

 

이와 같이 간단한 알고리즘과 데이터베이스 중복 검사를 통해 6자리의 고유한 난수+문자열 조합 코드를 생성할 수 있습니다. 이 방법을 활용하면, 할인 코드, 이벤트 초대 코드 등 다양한 상황에서 중복되지 않는 코드를 효과적으로 관리할 수 있습니다.