상황 : 가맹점의 사업자등록번호 리스트를 수집해야하는 상황이 생겼다.

  • 사업자등록번호는 총 10자리로 구성되며, 이러한 사업자등록번호 리스트를 얻을 수 있는 곳이 존재하지 않는다.

    • ( 공공데이터 포털 같은 다양한 사이트를 참고했지만 공식적으로 리스트를 얻을 수 있는 방법이 없다는 의미)
  • 그래서 사업자등록번호 10자리의 자리마다 1~9까지 무작위로 할당해서 중복 없이 사업자등록번호의 유효성을 검증하는 방법을 사용해야한다.

  • 10자리로 무작위로 생성된 사업자등록번호를 검증하기 위해서는 국세청에서 제공하는 "국세청_사업자등록정보 진위확인 및 상태조회 서비스"를 활용할 예정

경우의 수가 너무 많지 않은가?

  • 사업자등록번호의 첫자리는 0이 아닌 1부터 시작하므로 첫자리가 0이라는 경우의 수는 제외할 수 있다.

  • 하지만 이렇게 경우의 수가 제외되더라도 첫자리는 19 나머지 자리는 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일로 줄일 수 있을것이다.

+ Recent posts