Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  CheckPhoneNumber.java
Language: JAVA
Code:
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


class CheckPhoneNumber {

    /*
    Validate phone numbers in international format,
    i.e. starting with + followed by the country code.
    Comments are allowed between brackets.
    Example: +33 1 4746 6525, +49 6721-49 56 25 (Berlin).
    
    The phone number is validated using the regular expression phoneRE (see below)
    There is a limited validation of the country code based on the tables countryPhonecodes2
    and countryPhonecodes3. For USA (starting with 1) and Russia (starting with 7) no further
    validation is performed. 
    */

     /* 2 digit phone country codes */
    private static final String[] countryPhonecodes2 = {
            "20",
            "27",
            "30",
            "31",
            "32",
            "33",
            "34",
            "36",
            "39",
            "40",
            "41",
            "43",
            "44",
            "45",
            "46",
            "47",
            "48",
            "49",
            "51",
            "52",
            "53",
            "54",
            "55",
            "56",
            "57",
            "58",
            "60",
            "61",
            "62",
            "63",
            "64",
            "65",
            "66",
            "81",
            "82",
            "84",  
            "86",
            "90",
            "91",
            "92",
            "93",
            "94",
            "95",
            "98"
          };
    
    /* 2 first digits of 3 digit phone country codes */
     private static final String[] countryPhonecodes3 = {
          "21",
          "22",
          "23",
          "24",
          "25",
          "26",
          "29",
          "35",
          "37",
          "38",
          "42",
          "50",
          "59",
          "67",
          "68",
          "69",
          "80",
          "85",
          "87",
          "88",
          "96",
          "97",
          "99"  
     };
  
  private static HashSet countryPhonecodesSet2 = null;
     private static HashSet countryPhonecodesSet3 = null;
  
  static {
      countryPhonecodesSet2 = new HashSet(128);
      for(int i = 0;i<countryPhonecodes2.length;i++) {
           countryPhonecodesSet2.add(countryPhonecodes2[i]);
      }
      
      countryPhonecodesSet3 = new HashSet(128);
      for(int i = 0;i<countryPhonecodes3.length;i++) {
           countryPhonecodesSet3.add(countryPhonecodes3[i]);
      }  
  }
  
    /* Limited validation of phone number country code 
     * as we don't know were the country part ends
     * */
    private static boolean validatePhoneCountry(String num) {
         
         // US and Russia 1 digit, we allow up to 3 random digits
         if (num.substring(0,1).equals("1") || num.substring(0,1).equals("7")) {
              return true;
         }
         
         // Check 2 digit countries
         if ((num.length() > 1) && (num.length() != 3)) {
              if (countryPhonecodesSet2.contains(num.substring(0,2))) {
                   return true;
              }
         }
         
         // Check 3 digit countries, only verify 2 digits
         if (num.length() > 2) {
              if (countryPhonecodesSet3.contains(num.substring(0,2))) {
                   return true;
              }
         }
              
         return false;
    }

    public static boolean checkPhoneNumber (String phoneNumber) {
    String phoneRE = "^\\+([1-9]{1}[0-9]{0,3})[ ]?([0-9 \\-]{5,22}|\\({1}[0-9]+\\){1}[0-9 \\-]{5,22})(\\([\\.\\-'0-9a-zA-Z ]+\\))?$";
    boolean result = false;
    
    Pattern r = Pattern.compile(phoneRE);
    Matcher m = r.matcher(phoneNumber);
    
    if (m.find()) {
            String matched = m.group(0);

            if (matched.equals(phoneNumber)) {
                 String countrydigits = m.group(1);
                 result = validatePhoneCountry(countrydigits);
            }
    }
    
    return result;   
    }

    public static void main(String[] args) throws Exception {
    
    if (args.length < 1) {
     System.out.println("Please specify phonenumber between double quotes on the command line");
     return;
    }
    
    if (checkPhoneNumber (args[0])) {
      System.out.println("PhoneNumber is valid");
    } else {
      System.out.println("Invalid phone number");
    }
    
  }
}
Comments: