From 7301e8d62ca2d21d9109300f9b16eb7ddcbbf90b Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 17 Jan 2025 20:55:40 +0530 Subject: [PATCH] fix: check if two numbers are same --- crm/utils/__init__.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/crm/utils/__init__.py b/crm/utils/__init__.py index 7c7dabcf..e4ef8ccd 100644 --- a/crm/utils/__init__.py +++ b/crm/utils/__init__.py @@ -27,3 +27,34 @@ def parse_phone_number(phone_number, default_country="IN"): 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