TypeScript로 지역 인식 전화번호 생성기를 만든 방법

발행: (2025년 12월 11일 오후 04:36 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

도전 과제

다양한 형식: 미국 번호는 (###) ###-#### 형태이고, 다른 국가의 경우 #### ####와 같이 보일 수 있습니다.

고유성: 데이터베이스 시드용으로 10,000개의 번호를 생성할 때 중복이 있어서는 안 됩니다.

효율성: 빠르게 번호를 생성해야 합니다.

해결책: 패턴 교체

각 국가마다 규칙을 일일이 하드코딩하는 대신 패턴 매칭 방식을 사용했습니다. 각 국가는 다음과 같은 구성 플랜을 가집니다:

const plan = {
  countryCode: "+1",
  nationalPattern: "(###) ###-####", // # 은 숫자를 의미
  digits: 10
};

핵심 루프 (TypeScript)

아래는 generatePhoneNumbers 함수의 단순화된 버전입니다. Set을 이용해 고유성을 추적하고 패턴을 동적으로 채웁니다:

export function generatePhoneNumbers(options: any) {
  const { quantity, ensureUnique } = options;
  const results = [];
  const seen = new Set(); // O(1) 조회로 고유성 확인

  let attempts = 0;
  const maxAttempts = quantity * 10; // 무한 루프 방지

  while (results.length < quantity && attempts < maxAttempts) {
    attempts++;

    // 1. 원시 랜덤 숫자 생성
    const digits = createRandomDigits(10);

    // 2. 고유성 검사
    if (ensureUnique && seen.has(digits)) {
      continue; // 중복 건너뛰기
    }
    seen.add(digits);

    // 3. 패턴 매칭을 이용한 포맷팅 (핵심 부분)
    // 패턴을 순회하면서 `#`을 우리 숫자로 교체합니다
    results.push({
      formatted: insertDigits("(###) ###-####", digits),
      raw: digits
    });
  }

  return results;
}

insertDigits 헬퍼는 문자열을 하나씩 살펴보면서 #을 만나면 랜덤 문자열에서 한 자리를 꺼내고, 그 외의 문자(괄호, 공백 등)는 그대로 유지합니다.

직접 사용해 보기

이 로직(50개 이상의 국가 지원 및 CSV 내보내기 포함)을 무료 브라우저 기반 도구로 구현했습니다.

🚀 Random Phone Number Generator (Online Tool)

브라우저에서 완전히 실행되므로 개인 정보 보호에 좋고, 매우 빠릅니다.

행복한 코딩 되세요!

Back to Blog

관련 글

더 보기 »

celery-plus 🥬 — Node.js용 현대적인 Celery

왜 확인해 보세요? - 🚀 기존 Python Celery 워커와 함께 작동합니다 - 📘 TypeScript로 작성되었으며 전체 타입을 제공합니다 - 🔄 RabbitMQ AMQP와 Redis를 지원합니다 - ⚡ Async/a...