área unidos teléfono telefono telefonicos telefonicas país paises pais número numeros numero mexico las estados estado código colombia codigos codigo ciudades celular california java localization formatting

java - unidos - numeros de mexico(+52)



¿Cómo dividir el número de teléfono móvil en código de país, código de área y número local? (7)

¡No mantengas tu propia tabla de todos estos datos! Utilice la "Biblioteca de utilidades de número de teléfono internacional de Java v3.0", https://github.com/googlei18n/libphonenumber . ¡Esto es lo que usa Google, y Google lo mantiene para usted!

¿Cómo dividir el número de teléfono móvil en código de país, código de área y número local? por ejemplo, +919567123456 después de la división

código de país = 91

código de área = 9567

número local = 123456


Creo que necesitarás algo como un diccionario de códigos de área y país. Porque el stand de ellos puede tener una longitud diferente. EE.UU. +1, Alemania +49, incluso +6723. Lo mismo con los códigos de área ..


La respuesta depende mucho del país. No hay una regla universal que diga "este es el código de país, este es el código de área, este es el número local". La única información que se puede obtener universalmente es el número del país (e incluso eso puede tener 1-4 dígitos de longitud); entonces necesitas consultar el conjunto de reglas del país específico.

Por ejemplo (por ejemplo, "hay muchos números de teléfono diferentes en los países, pero todos siguen el mismo formato "):

  • +420123456789 es un número (falso) en la República Checa (código de país +420), y el resto es el número local (algunos países utilizan un espacio de direccionamiento no dividido, aunque podría inferir algunos bits de datos de los primeros 1-4 dígitos del número local (por ejemplo, "+420800 son números gratuitos")). Entonces, la única forma útil de analizar este número es en dos partes, +420 123456789 .
  • +18005551234 es un número (probablemente también falso) en los Estados Unidos; de acuerdo con el plan de numeración de América del Norte , +1 es el código del país, 800 es el código de área (números gratuitos), 555 es el código de intercambio y 1234 es el número local. Luego, puede analizar el número en cuatro partes, +1 800 555 1234 .

No es posible analizar los números de teléfono con un algoritmo simple, necesita usar tablas de datos que se completan con las reglas de cada país, porque cada país delimita sus números de teléfono de manera diferente.

El código de país es bastante sencillo, solo use los datos del artículo de códigos de llamada de país en wikipedia y cree una tabla con todos los códigos de país únicos. Cada país tiene un prefijo único, así que eso es fácil.

Pero luego debe buscar las reglas de cada país que desee admitir y extraer los códigos de área con las reglas de cada país.



Un problema muy complejo. Primero necesitas determinar el código del país . Dependiendo del código del país, el resto debe dividirse en código de área y número local. ¡Pero ninguna de las tres partes tiene una longitud fija, ni el número de orificio ni el código de área y la combinación de partes locales!

Ejemplo: 4930123456789

  • 49 es el código de país de Alemania
  • 30 es el código de área de berlín
  • 123456789 es un número local en Berlín (no real)

Ejemplo: 493328123456

  • 49 es el código de país de Alemania
  • 3328 es el código de área de Teltow
  • 123456 es un número local en Teltow (no real)

Ejemplo: 34971123456

  • 34 es el código de país de España
  • 971 es el código de área de Mallorca
  • 123456 es un número local en Mallorca (no real)

Como lo mencionaron varias personas, no puede hacer esto con un simple emparejamiento de cadenas. Las longitudes de los códigos de país ni de área son fijas.

Habiendo hecho esto en el pasado, mantuvimos una tabla similar en estructura a la siguiente:

+------------+---------+-------+--------------+ |country_code|area_code|country|area | +------------+---------+-------+--------------+ |44 |1634 |UK |Medway | |44 |20 |UK |London | |964 |23 |Iraq |Wasit (Al Kut)| |964 |2412 |Iraq |Unreal | +------------+---------+-------+--------------+

Luego calculamos la longitud máxima de area_code y country_code y verificamos la cadena por subcadena comenzando en la longitud máxima y avanzando hacia abajo hasta que encontramos una coincidencia.

Así que dado el número 441634666788

Habríamos empezado en la subcadena [1,7] (7 es la longitud de la combinación de código de área / país más larga), no encontramos una coincidencia, luego pasamos a [1,6] y encontramos la coincidencia para UK / Medway.

No muy eficiente pero funcionó.

EDITAR

También puedes probar algo como esto, pero deberías probarlo con un conjunto completo de datos o incluso dividirlo en selecciones de código de país y área separadas, ya que puede que no sea muy eficaz con tu DB elegido.

DECLARE @area_codes TABLE ( country_code VARCHAR(10), area_code VARCHAR(10), country VARCHAR(20), area VARCHAR(20), match_string VARCHAR(MAX), match_length INTEGER ) INSERT INTO @area_codes VALUES (''44'',''1382'',''UK'',''Dundee'', ''441382%'', 6) INSERT INTO @area_codes VALUES (''44'',''1386'',''UK'',''Evesham'', ''441386%'', 6) INSERT INTO @area_codes VALUES (''44'', ''1'', ''UK'', ''Geographic numbers'', ''441%'', 3) DECLARE @number VARCHAR(MAX) SET @number = ''441386111111'' SELECT TOP 1 * FROM @area_codes WHERE @number LIKE match_string ORDER BY match_length DESC

Mantendría los campos match_string y match_length a través de un disparador, teniendo cuidado de manejar los códigos de área nulos e indexar la tabla en la columna match_string.