import phonenumbers from phonenumbers import NumberParseException from phonenumbers import PhoneNumberFormat as PNF def parse_phone_number(phone_number, default_country="IN"): try: # Parse the number number = phonenumbers.parse(phone_number, default_country) # Get various information about the number result = { "is_valid": phonenumbers.is_valid_number(number), "country_code": number.country_code, "national_number": str(number.national_number), "formats": { "international": phonenumbers.format_number(number, PNF.INTERNATIONAL), "national": phonenumbers.format_number(number, PNF.NATIONAL), "E164": phonenumbers.format_number(number, PNF.E164), "RFC3966": phonenumbers.format_number(number, PNF.RFC3966), }, "type": phonenumbers.number_type(number), "country": phonenumbers.region_code_for_number(number), "is_possible": phonenumbers.is_possible_number(number), } return {"success": True, **result} except NumberParseException as e: return {"success": False, "error": str(e)} def are_same_phone_number(number1, number2, default_region="IN", validate=True): """ Check if two phone numbers are the same, regardless of their format. Args: number1 (str): First phone number number2 (str): Second phone number default_region (str): Default region code for parsing ambiguous numbers Returns: bool: True if numbers are same, False otherwise """ try: # Parse both numbers parsed1 = phonenumbers.parse(number1, default_region) parsed2 = phonenumbers.parse(number2, default_region) # Check if both numbers are valid if validate and not (phonenumbers.is_valid_number(parsed1) and phonenumbers.is_valid_number(parsed2)): return False # Convert both to E164 format and compare formatted1 = phonenumbers.format_number(parsed1, phonenumbers.PhoneNumberFormat.E164) formatted2 = phonenumbers.format_number(parsed2, phonenumbers.PhoneNumberFormat.E164) return formatted1 == formatted2 except phonenumbers.NumberParseException: return False