TypeScript로 지역 인식 전화번호 생성기를 만든 방법
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)
브라우저에서 완전히 실행되므로 개인 정보 보호에 좋고, 매우 빠릅니다.
행복한 코딩 되세요!