상황 : 가맹점의 사업자등록번호 리스트를 수집해야하는 상황이 생겼다.
사업자등록번호는 총 10자리로 구성되며, 이러한 사업자등록번호 리스트를 얻을 수 있는 곳이 존재하지 않는다.
- ( 공공데이터 포털 같은 다양한 사이트를 참고했지만 공식적으로 리스트를 얻을 수 있는 방법이 없다는 의미)
그래서 사업자등록번호 10자리의 자리마다 1~9까지 무작위로 할당해서 중복 없이 사업자등록번호의 유효성을 검증하는 방법을 사용해야한다.
10자리로 무작위로 생성된 사업자등록번호를 검증하기 위해서는 국세청에서 제공하는 "국세청_사업자등록정보 진위확인 및 상태조회 서비스"를 활용할 예정
경우의 수가 너무 많지 않은가?
사업자등록번호의 첫자리는 0이 아닌 1부터 시작하므로 첫자리가 0이라는 경우의 수는 제외할 수 있다.
하지만 이렇게 경우의 수가 제외되더라도 첫자리는 1
9 나머지 자리는 09까지 할당될 수 있다.- 즉 이 경우에는 할당 가능한 경우의 수는 9 × 10^9 = 90억 개가 된다.
사업자등록번호의 마지막 자리수는 앞 9자리의 숫자가 결정되면 자동으로 계산되어 할당되므로 실제 생성 가능한 조합은 9 × 10^8 = 9억 개로 줄어들게 된다.
- 조합 가능한 경우의 수 9억개를 하루에 1억개씩 검사한다 하더라도 총 9일이 걸린다.
- 추가로 1000000000 같은 10자리는 일치하지만 절대 존재할 수 없는 사업자등록번호 같이 검색이 필요 없는 케이스들도 존재한다.
- 영화 이미테이션 게임에서 암호 해독을 위해 발명된 기계인(크리스토퍼?)를 보면 모든 설정값을 하나하나 확인해서 암호를 해독하는 시간이 상당히 소요되는것을 알 수 있다.

조건을 가지고 경우의 수를 줄여보자.
사업자등록번호는 폐기되면 다시 사용되지 않는다.
정부 민원 사이트를 통해서 확인한 사업자등록번호 규칙은 다음과 같다.
- 일련번호 코드(3자리) : 신규개업자에게 사용 가능한 번호 101~999를 순차적으로 부여한다.
- 개인/법인 구분코드(2자리)
- 개인 구분 코드
- 개인과세사업자는 01~79까지 순차적으로 부여
- 개인면세사업자는 90~99까지 순차적으로 부여
- 법인이 아닌 종교 단체 : 89
- 아파트관리사무소, 다단계 판매원 등 : 80
- 법인 구분 코드
- 영리법인의 본점 : 81, 86, 87, 88
- 비영리법인의 본점 및 지점 : 82
- 국가 및 지방자치단체, 단체조합 등 : 83
- 외국법인의 본점 및 지점 연락 사무소 : 84
- 영리법인의 지점 : 85
- 일련번호코드(4자리)
- 0001 ~ 9999 부여
- 검증번호 (1자리)
앞 3자리 : 899개
가운데 2자리 : 97개
뒤 4자리 : 9999개
마지막 1자리 : 앞 9자리마다 오직 1개만 유효하
줄일 수 있는 경우의 수는 최대 8억 7천개로 좁혀진다.
소요 시간
- 소요 시간은 8.7일을 소요해야한다.
- 사업자등록번호조회 호출이 가능한 API 계정을 1개 더 늘리는 방법을 사용하면 소요 시간을 약 4.3일로 줄일 수 있을것이다.
'Framework > Django' 카테고리의 다른 글
| 믿을 수 없겠지만 Django ORM 필터 한 줄이 응답시간을 40배 늘렸다 (0) | 2025.09.20 |
|---|