Números de teléfono demasiado regulares
Ya hemos escrito antes sobre números de teléfono falsos que no pueden existir — números cuyo código de central empezaba por un dígito que el plan de numeración prohíbe, aproximadamente uno de cada ocho de todo lo que el generador había producido jamás para Norteamérica. Aquel artículo trata de números individuales que incumplen reglas individuales.
Este es su imagen especular, y es el defecto más difícil de ver, porque cada número implicado es correcto.
Tome un corpus de números de móvil finlandeses generados. Compruébelos uno a uno: código de país válido, prefijo de móvil válido, ningún dígito prohibido, forma correcta, aceptado por cualquier formulario de internet. Ahora cuente los dígitos. Todos y cada uno de los números tienen exactamente nueve. Los números de móvil finlandeses reales tienen ocho, nueve o diez.
Nada falla en ningún número. Todo falla en el conjunto.
Dónde la longitud variable es real
La suposición de que un país tiene una longitud de número de móvil es casi cierta, y eso es precisamente lo que la hace peligrosa. Se cumple en la inmensa mayoría de los planes de numeración, y luego deja de cumplirse en un puñado de sitios, y las excepciones no tienen nada de oscuro.
Finlandia. El número de móvil nacional tiene de 8 a 10 dígitos, incluido el prefijo de dos dígitos — la parte de abonado ocupa de 6 a 8 dígitos, según la normativa de numeración del regulador finlandés (Traficom M32). Las tres longitudes están vigentes, las tres están en uso, y el plan no designa ninguna de ellas como la normal.
Nueva Zelanda. La longitud depende de qué prefijo le haya tocado. El rango 21 — la asignación de móvil más antigua — lleva partes de abonado de 6 a 8 dígitos, lo que da números nacionales de 8, 9 o 10. Los demás prefijos de móvil llevan de 7 a 8, lo que da 9 o 10. No existe una respuesta única ni siquiera dentro del país, y esa respuesta es función de un valor que usted ya ha elegido para cuando lo necesita.
Serbia. Prefijo de dos dígitos más una parte de abonado de 6 o 7 dígitos: números nacionales de 8 o 9 dígitos.
Y un contraejemplo al menos igual de útil, porque es el mismo error apuntando en sentido contrario. Los números de móvil suecos se describen con frecuencia como de longitud variable. No lo son: la tabla del regulador da, para cada prefijo de móvil, un máximo igual al mínimo e igual a nueve dígitos. La variabilidad que la gente recuerda pertenece a los números geográficos suecos, que sí van de 7 a 9. El artículo complementario detalla esa comprobación; lo que conviene retener aquí es que «longitud variable» y «longitud fija» son dos afirmaciones que se repiten sin fuente, y que el mito existe en ambos sentidos.
Lo que entregábamos
Nuestra propia tabla de numeración contiene 65 entradas de locale. Hasta hace poco, cada una de ellas describía la longitud mediante un único entero: código de país, lista de prefijos de móvil, longitud. Un solo número.
Ese esquema no es un fallo en el sentido corriente. Es una afirmación fáctica sobre el mundo, codificada como tipo: la longitud del número nacional es función únicamente del país. Para 60 de las 65 entradas la afirmación resulta ser cierta. Para las otras cinco — Finlandia, Nueva Zelanda y Serbia en tres variantes de escritura — es falsa, y el código no habría podido expresar la verdad ni aunque alguien la hubiera conocido.
Así que se adoptó el compromiso, y se adoptó deliberadamente y quedó consignado: elegir la longitud más común y usarla en todas partes. Finlandia, Serbia y Nueva Zelanda se redondearon todas a nueve.
Piense en lo que eso produjo. Nueve dígitos es una longitud legal para un móvil finlandés. Lo es para uno serbio. Lo es para uno neozelandés. Cada número, tomado por separado, era válido. Y aun así el corpus seguía siendo imposible, porque ninguna población real de números de móvil finlandeses tiene un histograma de longitudes con una sola barra.
Esta es la forma general del problema, y merece enunciarse por sí sola:
La validez individual no implica la plausibilidad colectiva. Un validador comprueba una entrada frente a las reglas. Nada en ese proceso puede advertir que las mil entradas que la rodean son todas idénticas en una dimensión en la que la realidad varía.
Es también la razón por la que esta clase de defecto sobrevive tanto tiempo. El defecto del artículo complementario se anunciaba en cuanto alguien pegaba un número en un formulario. Este solo se anuncia cuando alguien traza un histograma, y nadie traza el histograma de un campo que cree constante.
Las señales de unos datos sintéticos demasiado regulares
La longitud es la señal más fácil de comprobar, y por eso sirve de ejemplo. No es la única. Si genera cualquier cosa que deba pasar por real, estas son las dimensiones por las que los datos sintéticos resultan característicamente demasiado limpios:
| Señal | Lo que hace el generador | Lo que hace la realidad |
|---|---|---|
| Longitud de campo constante | Una longitud por país / tipo | Varias longitudes permitidas, coexistiendo |
| Selección uniforme del prefijo | Cada prefijo se extrae con la misma probabilidad | Las cuotas de mercado son enormemente desiguales; un operador puede tener el 40 % |
| Parte de abonado uniforme | Todas las terminaciones 10^n igual de probables | La asignación es por bloques y dispersa; hay grandes rangos sin asignar |
| Nunca, jamás, colisiones | Sin duplicados por construcción | Los conjuntos de datos reales contienen duplicados, números reasignados, erratas |
| Todos los dígitos de control válidos | Calculados correctamente siempre | Los datos reales transcritos contienen una pequeña fracción de inválidos |
| Fechas perfectamente uniformes | Cumpleaños repartidos por igual a lo largo del año | Los nacimientos reales se agrupan por mes, día de la semana y en torno a fechas por defecto |
| Cada campo independiente | Cada uno extraído de su propia distribución | La ciudad guarda correlación con el prefijo de zona, el apellido con la región, el nombre con la edad |
| Exactamente un formato | Forma canónica en todas partes | Las entradas reales mezclan separadores, mayúsculas y minúsculas, y formatos heredados |
Solo algunas de estas señales merecen corregirse, y cuáles dependen enteramente de para qué sirvan los datos. La uniformidad perfecta de la parte de abonado es invisible para un humano y cara de corregir como es debido, porque exige datos de asignación por país que cambian cada mes. Un histograma de longitudes de un solo valor es visible para cualquiera que ejecute una sola orden y barato de corregir. Sopesar ese equilibrio es el trabajo de verdad; la lista de arriba no es más que el inventario que hace falta antes de poder sopesarlo.
Hay también un límite que conviene nombrar: no se pueden corregir todas, e intentarlo empeora las cosas. Cada correlación que se añade es una correlación que a partir de ahora hay que mantener y justificar. El objetivo no es «indistinguible de los datos reales» — eso es una carrera armamentística sin fin y, para un generador de personas inventadas, un objetivo ligeramente inquietante. El objetivo es «ninguna prueba de una sola orden encuentra una estructura que sea obviamente sintética».
La corrección, y la trampa que encierra
La reparación es un cambio de esquema: que el campo de longitud pueda llevar tres formas en lugar de una.
length := integer // fixed
| list of integers // uniform choice within the permitted set
| map { prefix -> integer|list, "*" -> integer|list }
Sesenta de las sesenta y cinco entradas siguen siendo un entero simple y quedan intactas, bit a bit. Cuatro pasan a ser listas. Una pasa a ser un map.
Ahora, la trampa, que es la parte que justifica el artículo. La opción intermedia obvia — «reunir todas las longitudes que el país permite y elegir uniformemente dentro de ese conjunto» — es errónea para Nueva Zelanda, y errónea exactamente del modo del que trata el artículo complementario.
Nueva Zelanda permite 8, 9 y 10 dígitos. Pero los 8 dígitos están permitidos únicamente en el rango 21. Una extracción uniforme de {8, 9, 10} aplicada a cada prefijo produce números de ocho dígitos en 22, 27, 28 y 29, que el plan de numeración no contiene. Habría partido de números todos de la misma longitud y correctos, para acabar con números variados e inválidos — reintroduciendo precisamente el defecto en el que el otro artículo se gastaba el 12 % de la producción de un locale.
De ahí la forma map, y de ahí el único detalle de implementación que de verdad importa:
Resuelva la longitud después de elegir el prefijo, no antes.
Si la longitud se decide primero, el prefijo queda restringido por ella, y usted tiene la dependencia del revés. Si el prefijo se decide primero, la longitud es una simple consulta. Es una reordenación de una sola línea y es toda la diferencia entre un modelo correcto y otro que solo lo parece.
La misma trampa se generaliza a cualquier campo cuyas restricciones de validez sean condicionales: el formato del código postal según la región, la longitud del identificador fiscal según el tipo de entidad, la longitud del IBAN según el país, el formato de la matrícula según la clase de vehículo. Siempre que los valores permitidos de un campo dependan de otro campo, el campo dependiente debe resolverse en segundo lugar, y un esquema que almacena la restricción como un conjunto plano en vez de como una correspondencia no puede expresar la dependencia en absoluto. Parecerá que funciona, porque el conjunto plano es una unión correcta — sencillamente no es una unión correcta caso por caso.
Uniforme sobre las longitudes no es uniforme sobre los números
Esta es la parte en la que la honestidad cuesta algo, y es la razón por la que no nos limitamos a cantar victoria.
Los reguladores publican qué longitudes están permitidas. No publican cuántos números de cada longitud están en uso. No es un descuido: las estadísticas de uso son datos comerciales en manos de los operadores, y el plan de numeración es un instrumento jurídico sobre la asignación. Así que «qué longitudes existen» tiene fuente y «con qué frecuencia aparece cada una» no la tiene.
Ante eso, elegimos uniformemente dentro del conjunto correcto — acertando en cuanto al soporte, sin verificación en cuanto a la forma, y dejándolo dicho así en el código en lugar de darlo por supuesto en silencio.
Pero fíjese en lo grande que es la parte no verificada. Uniforme sobre las longitudes está muy lejos de uniforme sobre los números, porque cada dígito adicional multiplica por diez el espacio disponible:
| Locale | Espacio de 8 dígitos | Espacio de 9 dígitos | Espacio de 10 dígitos | Total |
|---|---|---|---|---|
| Finlandia | 7.200.000 | 72.000.000 | 720.000.000 | 799.200.000 |
| Serbia | 8.100.000 | 81.000.000 | — | 89.100.000 |
| Nueva Zelanda | 900.000 | 54.000.000 | 540.000.000 | 594.900.000 |
Para Finlandia, una elección uniforme entre las tres longitudes envía uno de cada tres números a una reserva que supone el 0,9 % del espacio total. Extraer uniformemente sobre el espacio daría en cambio 0,9 % / 9,0 % / 90,1 %. Las dos políticas difieren en un factor 36 en la banda de ocho dígitos. No se sabe que ninguna de las dos sea la correcta. Lo que sí se puede saber es que son enormemente distintas, y que elegir una sin advertir la diferencia no es una decisión, es un accidente.
Medida sobre el corpus generado, nuestra elección actual produce:
| Locale | 8 dígitos | 9 dígitos | 10 dígitos |
|---|---|---|---|
| Finlandia | 33,0 % | 33,3 % | 33,7 % |
| Serbia | 49,8 % | 50,2 % | — |
| Nueva Zelanda | 5,7 % | 47,5 % | 46,8 % |
El 5,7 % de Nueva Zelanda es la fila interesante. No se eligió. Se desprende del map: solo uno de cada seis prefijos puede llevar ocho dígitos, de modo que los números de ocho dígitos aparecen aproximadamente en un sexto de un tercio. Plantear bien la restricción produjo, como efecto secundario, una distribución de longitudes no uniforme — lo cual es una pequeña ilustración de un principio general: modelar correctamente la estructura le regala un realismo que no ha tenido que estimar. Allí donde pueda sustituir una distribución adivinada por una restricción dura, hágalo; la restricción es defendible y la conjetura no.
El coste que nadie espera: longitud variable significa azar variable
Una nota práctica, porque es la razón por la que este compromiso existió desde el principio en lugar de corregirse hace años.
Si su generador deriva una entrada completa de un único flujo determinista — mismos datos de entrada, misma entrada resultante, siempre — entonces el flujo es posicional. El campo n consume lo que el flujo produzca en la posición n. Un campo cuyo número de extracciones depende de los valores extraídos desplaza todo lo que viene después de él.
Un número de teléfono de longitud variable hace exactamente eso: elegir una longitud cuesta una extracción, y después el número de extracciones de dígitos depende de la longitud elegida. Hágalo de forma ingenua y cambiará toda entrada que contenga un número de teléfono finlandés, incluidos todos los campos que no tienen nada que ver con los teléfonos.
La solución tiene dos mitades y ambas merecen copiarse:
Gaste la extracción solo donde la variabilidad sea real. Una longitud escalar se resuelve con cero extracciones. Sesenta de los sesenta y cinco locales quedan por tanto intactos — no «suficientemente parecidos», sino idénticos de forma verificable: los mismos números a partir de las mismas semillas, y el flujo situado después en la misma posición. Un cambio que podría haberlo perturbado todo perturba cinco entradas.
Confine la variabilidad detrás de una frontera que restaure el flujo. Allí donde un campo necesite de verdad un número de extracciones dependiente de los datos, su sitio está detrás de una llamada que guarde y restaure la posición del flujo, de modo que su coste sea invisible desde fuera. Es el mismo invariante que el artículo complementario tuvo que proteger cuando descartó el muestreo por rechazo como corrección de los códigos norteamericanos inválidos, y merece la pena leer ese argumento antes de diseñar nada a su alrededor: Números de teléfono falsos que no pueden existir.
La lección general es que el determinismo no es gratis y no es local. Es una restricción sobre la forma de todas las funciones generadoras del sistema, y veta en silencio una amplia clase de implementaciones que por lo demás serían obvias. Que Finlandia estuviera redondeada a nueve dígitos durante años no se debía a la ignorancia sobre Finlandia. Se debía a que la versión honesta parecía que iba a costar la garantía de determinismo, y nadie había medido si de verdad la costaría. No la costó: el coste fueron cinco entradas, y nunca iba a ser otra cosa que cinco entradas.
Mida el radio de impacto antes de aceptar un compromiso en su nombre. Es la frase más transferible de este artículo.
Cómo auditar su propio corpus generado
Todo esto se puede comprobar en unos minutos con datos que ya tiene.
1. Trace el histograma de todos los campos de longitud. Ni la media, ni la moda — el histograma completo. Una sola barra donde la especificación permite varias es el defecto entero, visible al instante.
2. Compruebe el conjunto permitido frente a una fuente primaria, en ambos sentidos. ¿Está emitiendo una longitud que no está permitida? ¿Está dejando de emitir alguna que sí lo está? La segunda pregunta es la que nadie hace, y es la que encuentra este fallo.
3. Hágalo por prefijo, no globalmente. Un histograma de longitudes globalmente correcto puede ser localmente imposible. El conjunto global {8, 9, 10} de Nueva Zelanda es correcto; aplicado al prefijo 27 es erróneo. Toda restricción condicional debe auditarse en el nivel en el que vive la condición.
4. Compare la forma de su distribución, no solo su soporte. Acertar con el conjunto de valores permitidos es el primer 80 %. Si es uniforme sobre los valores o uniforme sobre el espacio que estos representan es, en al menos un caso real, una cuestión de un factor 36.
5. Deje escrito qué tiene fuente y qué es supuesto, dentro del propio artefacto. «Estas longitudes proceden del regulador; las proporciones entre ellas son una suposición, porque las estadísticas de uso no se publican» cabe en una frase. Sin ella, un lector futuro no podrá distinguir una distribución medida de un valor de relleno, y o bien confiará demasiado en ella, o rehará el trabajo.
6. Busque otras constantes que no deberían serlo. El campo de longitud de un solo entero no fue un error de nadie; fue una suposición que nadie llegó a formular. Todo escalar de una tabla de especificación es la afirmación de que esa magnitud no varía. Algunas de esas afirmaciones son falsas y ninguna está etiquetada.
La lista de comprobación
- Un campo que siempre vale lo mismo es una hipótesis, no un hecho. Compruebe la hipótesis frente a una fuente primaria antes de entregar el esquema que la codifica.
- La validez individual no implica la plausibilidad colectiva. Cada número puede superar todas las reglas mientras el corpus sigue siendo imposible.
- Trace el histograma de los campos que cree constantes. Son justo los que nadie ha trazado nunca.
- Cuando una restricción es condicional, resuelva antes la condición. El prefijo antes que la longitud, la región antes que el formato del código postal, el tipo de entidad antes que la longitud del identificador.
- No corrija el exceso de regularidad añadiendo variación uniforme. Uniforme sobre la unión de los valores permitidos genera valores que están permitidos en algún sitio y son inválidos aquí. Eso es un defecto peor que aquel del que partió.
- Distinga el soporte de la forma. Los reguladores publican lo que está permitido; casi nadie publica lo que se usa. Diga cuál de los dos tiene.
- Uniforme sobre las categorías no es uniforme sobre el espacio. Para cualquier cosa posicional, cada posición adicional multiplica el espacio por la base; una elección plana sobre las longitudes es una elección extremadamente no plana sobre los valores.
- Prefiera una restricción dura a una distribución estimada. Una estructura que puede defender gana a un realismo que ha tenido que adivinar, y a menudo produce ese realismo gratis.
- Mida el radio de impacto de un compromiso antes de aceptarlo. «Esto lo cambiaría todo» fue la razón por la que un valor que se sabía erróneo se entregó durante años. Habría cambiado cinco entradas de sesenta y cinco.
- Mantenga el número de extracciones aleatorias independiente de los valores extraídos, u oculte la dependencia detrás de una frontera. El determinismo es una restricción global sobre implementaciones locales.
El artículo complementario terminaba con una pregunta que no podía responder: si generar números de teléfono plausibles es siquiera una buena idea, dado que un número plausible de un país pequeño tiene bastantes probabilidades de pertenecer a alguien. Este artículo tampoco la responde. Lo que añade es la otra mitad de «plausible»: un número puede ser individualmente indistinguible de uno real y estar aun así en un corpus que ninguna población real podría producir. Ambas mitades tienen que cumplirse, y solo una de las dos es algo que un validador pueda comprobar por usted.
Para las reglas estructurales, los rangos de ficción reservados y el argumento del determinismo al completo, véase Números de teléfono falsos que no pueden existir. Para el mismo fallo de «el esquema afirmaba algo sobre el mundo» en otro campo, véase Los sistemas de códigos postales y por qué no existe un generador universal. Para un defecto que resultaba invisible porque todas las métricas agregadas lo daban por bueno, véase La mitad de su lista ponderada no está ponderada.
Datos actualizados a 2026-07-21
Todas las cifras se midieron el 21 de julio de 2026 sobre la tabla de numeración entregada y sobre el corpus generado. Las distribuciones de longitudes se volvieron a derivar para este artículo mediante la medición directa de los ficheros generados y mediante simulación sobre 10.000 números por locale, y no se tomaron del historial de cambios.
Fuentes y notas:
- Composición de la tabla — 65 entradas de locale. 60 llevan una longitud escalar; 4 llevan una lista de longitudes permitidas (Finlandia, y Serbia en las variantes de escritura cirílica, latina y por defecto); 1 lleva un map indexado por prefijo (Nueva Zelanda). Las cinco entradas variables representan tres países, ya que las tres entradas serbias solo difieren en la escritura y deben mantenerse sincronizadas entre sí.
- Finlandia — números de móvil nacionales de 8, 9 o 10 dígitos, formados por un prefijo de dos dígitos más una parte de abonado de 6 a 8 dígitos, según la normativa Traficom M32. Se entregan ocho prefijos de móvil. Espacio de generación por longitud: 7.200.000 / 72.000.000 / 720.000.000, en total 799.200.000.
- Nueva Zelanda — el rango
21permite 8, 9 o 10 dígitos; los otros cinco prefijos de móvil entregados permiten 9 o 10. Espacio de generación por longitud: 900.000 / 54.000.000 / 540.000.000, en total 594.900.000. La proporción observada del 5,7 % de números de ocho dígitos es una consecuencia de la restricción, no un objetivo configurado. - Serbia — 8 o 9 dígitos, formados por un prefijo de dos dígitos más una parte de abonado de 6 o 7 dígitos. Nueve prefijos en la entrada por defecto, ocho en cada variante de escritura. Espacio de generación: 8.100.000 / 81.000.000.
- Suecia — los prefijos de móvil llevan un máximo igual al mínimo e igual a 9 dígitos, de modo que la afirmación tan repetida de que los números de móvil suecos son de longitud variable es falsa; los números geográficos suecos sí varían, de 7 a 9. Establecido en una auditoría anterior frente a la tabla de numeración del regulador y recogido en el artículo complementario; no se ha vuelto a verificar aquí.
- Distribución de longitudes medida — a partir del corpus generado en disco, contando los dígitos posteriores al código de país. Finlandia: 6.597 / 6.656 / 6.743 de 19.996 números con 8 / 9 / 10 dígitos, es decir, 33,0 % / 33,3 % / 33,7 %. Serbia: 9.952 / 10.044 de 19.996 con 8 / 9 dígitos, es decir, 49,8 % / 50,2 %. Nueva Zelanda: 1.138 / 9.499 / 9.362 de 19.999 con 8 / 9 / 10 dígitos, es decir, 5,7 % / 47,5 % / 46,8 %. Una simulación independiente de 10.000 extracciones por locale reproduce estas cifras con un margen de unas décimas de punto porcentual.
- Cifras del espacio de generación — calculadas, para cada prefijo, como
9 × 10^(length − prefix digits − 1), sumadas sobre prefijos y longitudes. El primer dígito de la parte de abonado está restringido a no valer cero, de donde procede el factor 9. - Las proporciones entre longitudes no están verificadas. La elección dentro de un conjunto permitido es uniforme. Los planes de numeración indican qué longitudes están autorizadas; no indican cuántos números de cada longitud se han asignado, y no se disponía de datos de asignación a nivel de operador. Esto queda consignado como una suposición explícita en la fuente en lugar de dejarse implícito.
- Los locales con longitud escalar no han cambiado — verificado generando a partir de semillas fijas antes y después del cambio de esquema y comparando tanto los números emitidos como la posición posterior del flujo aleatorio; los cuatro locales sometidos a comprobación puntual produjeron una salida idéntica y una posición de flujo posterior idéntica. Una longitud escalar no consume ninguna extracción, y por eso el cambio es inerte para 60 de las 65 entradas.
- El compromiso histórico — Finlandia, Serbia y Nueva Zelanda estaban antes fijadas en 9 dígitos, lo que quedaba consignado en la fuente como una limitación deliberada del formato de un solo entero y no como una creencia sobre esos países. Nueve dígitos es una longitud permitida en los tres, de modo que ningún número generado bajo la regla antigua era inválido.