2013 이전/iOS개발

[iPhone 개발] 전화 번호 -(대쉬) 규칙 적용 함수

하구루 2017. 2. 25. 15:59


voip 앱을 만들다가 필요에 의해서 직접 아이폰 전화 어플에 전화 번호 하나하나 넣는 노가다를 통해서 확인하여 기본적인 국내 통화의 대쉬 규칙을 리스팅하여 함수로 만들었다.


규칙은 아래와 같다


  • 1로 시작하는 세자리까지 대쉬 없음
  • 2로 시작하는 번호는 1-3-4 1-4-4
  • 0으로 시작하는 번호
    • 02로 시작하는 번호 2-3-4, 2-4-4
    • 013로 시작하는 번호 4-3-4, 4-4-4
    • 015로 시작하는 번호 5-4
    • 010, 011, 012, 016, 017, 018, 019로 시작하는 번호 3-3-4, 3-4-4
    • 그외에 0으로 시작하는 번호 3-3-4
  • 0또는 2외에 시작하지 않는 경우
    • 15, 16, 17, 18, 19로 시작하는 경우 4-4
      • 15를 제외한 나머지는 8자리 이상일떄 2-3-4- 2-4-4
    • 그외의 경우 2-3-4 2-4-4


소스는 아래와 같고 사용법은

+ (NSString *) makePhoneNumber:(NSString*) phoneNumStr;


요 메소드에 대쉬가 없는 전화 번호를 NSString 형태로 넣어주면 대쉬가 붙어서 NSString으로 return 해준다.

Global이라는 class 안에서 구현되었다.


// 뒷부분이 3-4 인경우 스트링 만들어줌

+ (NSString *) make34:(NSString *)phoneNumStr withHeadCodeCnt:(NSInteger) headCodeCnt  {
 
    if([phoneNumStr  length] > headCodeCnt && [phoneNumStr  length] <= headCodeCnt + 3) {
 
        return [NSString stringWithFormat:@"%@-%@", [phoneNumStr substringToIndex:headCodeCnt], [phoneNumStr substringFromIndex:headCodeCnt]];
 
    } else if ([phoneNumStr length] > headCodeCnt + 3 && [phoneNumStr  length] < headCodeCnt + 8) {
 
        return [NSString stringWithFormat:@"%@-%@-%@", [phoneNumStr substringToIndex:headCodeCnt], 

                [phoneNumStr substringWithRange:NSMakeRange(headCodeCnt, 3)], [phoneNumStr substringFromIndex:headCodeCnt + 3]];
 
    } else {
 
        return phoneNumStr;
 
    }
 
}
 



// 뒷부분이 3-4 4-4 인경우 스트링 만들어줌
 
+ (NSString *) make34_44 :(NSString *)phoneNumStr withHeadCodeCnt:(NSInteger) headCodeCnt{
 
    if([phoneNumStr  length] > headCodeCnt && [phoneNumStr  length] < headCodeCnt + 8) {
 
        return [self make34:phoneNumStr withHeadCodeCnt:headCodeCnt];
 
    } else if ([phoneNumStr  length] == headCodeCnt + 8) { 

        return [NSString stringWithFormat:@"%@-%@-%@", [phoneNumStr substringToIndex:headCodeCnt], 

                [phoneNumStr substringWithRange:NSMakeRange(headCodeCnt, 4)], [phoneNumStr substringFromIndex:headCodeCnt + 4]];
 
    } else {
 
        return phoneNumStr;
 
    }
 
}
 

// 두개로 
 
+ (NSString *) makeHalf:(NSString *)phoneNumStr withHeadCodeCnt:(NSInteger) headCodeCnt {
 
    
 
    if([phoneNumStr length] > headCodeCnt && [phoneNumStr length] <= headCodeCnt + 4) {
 
        return [NSString stringWithFormat:@"%@-%@", [phoneNumStr substringToIndex:headCodeCnt], [phoneNumStr substringFromIndex:headCodeCnt]];
 
    } else {
 
        return phoneNumStr;
 
    }
 
}
 
+ (NSString *) makePhoneNumber :(NSString *)phoneNumStr {
    
    NSArray* specialCode334_344 = [[[NSArray alloc] initWithObjects:@"010", @"011", @"012", @"016", @"017", @"018", @"019", 
                          @"070",nil] autorelease];
    
    NSArray* specialCode44 = [[[NSArray alloc] initWithObjects:@"15", @"16", @"17", @"18", @"19", nil] autorelease];
    
    if([phoneNumStr hasPrefix:@"1"] && [phoneNumStr length] <= 3) {
        return phoneNumStr;
    } else if([phoneNumStr hasPrefix:@"2"]) {
        return [Global make34_44:phoneNumStr withHeadCodeCnt:1];
    } else if([phoneNumStr hasPrefix:@"0"]) { // 0으로 시작되는 번호
        if([phoneNumStr length] > 2 && [phoneNumStr hasPrefix:@"02"]) {   // 02로 시작되는 번호 2-3-4 2-4-4 규칙
            return [Global make34_44:phoneNumStr withHeadCodeCnt:2];
        } else if([phoneNumStr length] > 3){ // 판별 코드가 3자리
            if([phoneNumStr hasPrefix:@"014"]) { // 014경우 아애 안한다
                return phoneNumStr;
            } else if([phoneNumStr hasPrefix:@"013"]) { // 013경우 4-3-4 4-4-4
                return [Global make34_44:phoneNumStr withHeadCodeCnt:4];
            } else if([phoneNumStr hasPrefix:@"015"]) { // 015경우 5-4
                return [Global makeHalf:phoneNumStr withHeadCodeCnt:5];
            } else if([specialCode334_344 indexOfObject:[phoneNumStr substringToIndex:3]] != NSNotFound) { // 3-3-4 3-4-4 규칙
                return [Global make34_44:phoneNumStr withHeadCodeCnt:3];
            } else {
                return [Global make34:phoneNumStr withHeadCodeCnt:3];
            }
        } else {
            return phoneNumStr;  
        }
    } else { // 그외의 숫자로 시작할경우 
        if([phoneNumStr length] > 2) {
            if([specialCode44 indexOfObject:[phoneNumStr substringToIndex:2]] != NSNotFound) { // 4-4 규칙 
                if(![phoneNumStr hasPrefix:@"15"] && [phoneNumStr length] > 8) { // 15 로 시작하는경우가 아니면  8자리 이상 다시 처리
                    return [Global make34_44:phoneNumStr withHeadCodeCnt:2];
                } else {
                    return [Global makeHalf:phoneNumStr withHeadCodeCnt:4];
                }
            } else { // 두개로 나눠지는 경우가 아닌 경우 대부분
                return [Global make34_44:phoneNumStr withHeadCodeCnt:2];
            }
        } else {
            return phoneNumStr;
        }
        
    }
}


반응형