La clave de Registro Federal de Contribuyentes asignada a personas físicas se compone de 13 caracteres.
Comprende los primeros 4 caracteres que equivalen a 4 letras asignadas de la siguiente manera:
- Caracter 1: Letra inicial de apellido paterno.
- Caracter 2: Vocal inicial de apellido paterno. (primera vocal)
- Caracter 3: Letra inicial de apellido materno.
- Caracter 4: Letra inicial del nombre.
Comprende los siguientes 6 caracteres que equivalen a 6 números asignados de la siguiente manera:
- Caracteres 5 y 6: Los últimos 2 digitos del año de nacimiento.
- Caracteres 7 y 8: Mes de nacimiento a 2 dígitos.
- Caracteres 9 y 10: Día de nacimiento a 2 dígitos.
Comprende los últimos 3 caracteres asignados de manera exclusiva para evitar duplicidad en el RFC.
- Caracter 11: Letra o número.
- Caracter 12: Letra o número.
- Caracter 13: Letra o número.
La siguiente expresión regular válida el formato de RFC descrito previamente:
/^([A-ZÑ&]{4}) ?(?:- ?)?(\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])) ?(?:- ?)?([A-Z\d]{2})([A\d])$/
Ejemplos de cadenas permitidas por la expresión regular:
- EUAJ850315FW2
- EUAJ-850315-FW2
- EUAJ 850315 FW2
- EUAJ - 850315 - FW2
- EUAJ- 850315- FW2
- EUAJ -850315 -FW2
- Constructos de agrupación
- Anclajes
- Cuantificadores
- Expresiones entre corchetes
- Clases de caracteres
- El operador OR
Los contructos de agrupación representan secciones de la expresión regular delimitados por paréntesis "()". Comenzaremos explicando las partes principales de la expresión regular.
Tener identificados los constructos de agrupación nos ayudará en las siguientes secciones a entender con mayor claridad el resto de los componentes.
/^([A-ZÑ&]
{4})
?(?:- ?)
?(\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01]))
?(?:- ?)
?([A-Z\d]
{2})([A\d])
$/
-
/^
([A-ZÑ&]
{4})
Constructo de agrupación que comprende cualquier letra mayúscula "A-Z" incluida la "Ñ" y el caracter "&".
Podemos notar además el anclaje "^" idicando que la cadena debe comenzar con este grupo y el cuantificador "{4}" indicando que debe contener 4 caracteres del grupo. -
?
(?:- ?)
?
Constructo de agrupación que permite el uso opcional del caracter "-" o de un espacio " " en la cadena. -
(\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01]))
Constructo de agrupación que se puede descomponer en las siguientes sub-agrupciones:
"\d{2}" sub-agrupación, debe contener 2 dígitos.
"(?:0[1-9]|1[0-2])" sub-agrupación, debe contener un número de 2 dígitos con valor entre 01 y 12.
"(?:0[1-9]|[12]\d|3[01])" sub-agrupación, debe contener un número de 2 dígitos con valor entre 01 y 31. -
([A-Z\d]
{2})
Constructo de agrupación que comprende cualquier letra mayúscula "A-Z" o cualquier dígito entre 0 y 9.
Podemos notar además el cuantificador {2} indicando que se deben incluir 2 caracteres del grupo. -
([A\d])
$/
Constructo de agrupación que comprende cualquier letra amyúscula "A-Z" o número (sólo 1 caracter).
Podemos notar además el anclaje "$" indicando que la cadena debe terminar con este grupo.
/^
([A-ZÑ&]{4}) ?(?:- ?)?(\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])) ?(?:- ?)?([A-Z\d]{2})([A\d])$
/
- El caracter "
^
" indica que la cadena debe comenzar con algún valor del constructo de agrupación: "([A-ZÑ&]{4})". - El caracter "
$
" indica que la cadena debe terminar con algún valor del constructo de agrupación: "([A\d])".
/^([A-ZÑ&]{4}
) ?
(?:- ?
)?
(\d{2}
(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])) ?
(?:- ?
)?
([A-Z\d]{2}
)([A\d])$/
- "[A-ZÑ&]
{4}
" indica que debe contener 4 caracteres del constructo de agrupación "[A-ZÑ&]". - "
?
" indica que se permite tener 0 ó 1 caracteres de espacio " ". - "(?:-
?
)?
" indica que se permite tener 0 ó 1 caracteres ya sea guión medio "-" o espacio " ". - "\d
{2}
" indica que debe contener 2 caracteres del constructo de agrupación "\d". - "[A-Z\d]
{2}
" indica que debe contener 2 caracteres del constructo de agrupación "[A-Z\d]".
/^([A-ZÑ&]
{4}) ?(?:- ?)?(\d{2}(?:0[1-9]
|1[0-2]
)(?:0<[1-9]
|[12]
\d|3[01]
)) ?(?:- ?)?([A-Z\d]
{2})([A\d]
)$/
Dentro de la expresión regular podemos encontrar las siguientes expresiones entre corchetes:
- "[A-ZÑ&]" Inclyue cualquier letra mayúscula, ademas incliuye la letra "Ñ" y el caracter "&".
- "[1-9]" Incluye cualquier digito del 1 al 9.
- "[0-2]" Incluye los dígitos 0, 1 y 2.
- "[12]" Incluye los dígitos 1 y 2.
- "[01]" Incluye los dígitos 0 y 1.
- "[A-Z\d]" Incluye cualquier letra mayúscula o cualquier dígito.
- "[A\d]" Incluye la letra mayúscula A o cualquier dígito.
/^([A-ZÑ&]{4}) ?(?:- ?)?(\d
{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d
|3[01])) ?(?:- ?)?([A-Z\d
]{2})([A\d
])$/
Dentro de la expresión regular se usa en varias ocasiones la clase de caracter "\d
" que incluye cualquier dígito numérico árabe. Es equivalente a "[0-9]".
/^([A-ZÑ&]{4}) ?(?:- ?)?(\d{2}(?:0[1-9]|
1[0-2])(?:0[1-9]|
[12]\d|
3[01])) ?(?:- ?)?([A-Z\d]{2})([A\d])$/
Encontramos el operador OR "|
" en las siguientes secciones de la expresión regular:
- "(?:0[1-9]
|
1[0-2])" Encontrar el número "0" seguido de algún digito entre 1 y 9Ó
encotrar el número "1" seguido de algún dígito entre 0 y 2.
Validando así las opciones permitidas para un valor de mes. - "(?:0[1-9]
|
[12]\d|
3[01])" Encontrar el número "0" seguido de algún digito entre 1 y 9Ó
encotrar el número "1" o "2" seguido de algún dígito entre 0 y 9Ó
encontrar el número "3" seguido del número 0 o 1.
Validando así las opciones permitidas para un valor de día del mes.
Jaime Esquivel
e-mail: [email protected]
GitHub User: https://github.com/jaime-a-esquivel-a