Publicado por & archivado en PHP, Programación.

Los códigos de la Seguridad Social en España constan de tres grupos de números que suman un total de 12 dígitos. Un código inicial de 2 cifras que corresponden con la provincia, el número de afiliado de 8 dígitos y un número de control de 2 dígitos.

 

Según el tipo de documento el número aparece junto o separado, por ejemplo:
Separado: 28 / 12345678 / 40
Junto: 281234567840

 

Para validarlo necesitamos tratar las tres partes por separado, así que si admitiéramos el número entero en un formulario habría que separarlo, por ejemplo con substr.

 

La validación se hace de forma diferente dependiendo de si el número de afiliado es mayor o menor de 10 millones. Suponiendo que asignamos el número de provincia a la variable $a, el número de afiliado a $b, y el código de control a $c, se calcula de la siguiente forma:

 

Si el número de afiliado ($b), es menor de 10 millones, el código de validación debe ser el resto de dividir entre 97 el resultado de esta operación:
$b+$a*10000000

Si el número de afiliado ($b), es mayor de 10 millones, el código de validación debe ser el resto de dividir entre 97 el concatenado de $a y $b:
$a.$b

Este es el código completo del validador:


/**
 * @name Ejemplo de validación de código de la Seguridad Social
 * @copyright (c)2015 Intervia IT
 * @link http://intervia.com/doc/validar-numeros-de-la-seguridad-social/
 * @license MIT http://opensource.org/licenses/MIT
 */

//Inicializa el array para mensajes de error
$msg = array();

//Captura las variables del POST y filtra todo lo que no sean números
$p = preg_replace("/[^0-9]/i","",$_REQUEST['p']); //switch para el envío
$na = preg_replace("/[^0-9]/i","",$_REQUEST['na']); //código de provincia
$nb = preg_replace("/[^0-9]/i","",$_REQUEST['nb']); //número de afiliación
$nc = preg_replace("/[^0-9]/i","",$_REQUEST['nc']); //dígito de control
$nss = preg_replace("/[^0-9]/i","",$_REQUEST['nss']); //número S.S. entero

//Si existe el número completo y tiene 12 dígitos, los descompone en a, b y c
if (strlen($nss) == 12){
 $na = substr($nss, 0, 2);
 $nb = substr($nss, 2, 8);
 $nc = substr($nss, 10, 2); 
}

//Si se envió el formulario
if ($p ==1){
 
 //Si falta alguno de los dígitos da error
 if($na && $nb && $nc){
 
 //Si el número es menor de 10 millones
 if ($nb < 10000000){

 //Asignamos a d la suma de b+a * 10 millones
 $nd = $nb+$na*10000000;

 //Si el número es mayor de 10 millones
 }else{

 //Asignamos a d la concatenación de a y b
 $nd = $na.$nb;
 }

 //El código de validación ($c), 
 //debe ser el resto de la división d entre 97
 $validacion = $nd % 97;

 //Muestra el resultado de la validación
 if ($validacion == $nc){
 $msg[] = 'Número de la S.S. correcto';
 }else{
 $msg[] = '<b>ERROR:</b> Número de la S.S. incorrecto';
 }
 
 }else{
 //Error si alguna de las casillas está vacía
 $msg[] = '<b>ERROR:</b> Hay que introducir datos en todas las casillas 
 y sólo se admiten números. Si se pone el número entero, debe 
 tener 12 dígitos.';
 }
}





/*
 * *************************
 * Muestra mensajes de error
 * *************************
 */

if ($msg){
 echo '<div style="background-color:#eee;padding:3px;">';
 foreach ($msg as $m){
 echo $m;
 }
 echo '</div>';
}






/*
 * ************************************
 * Formulario para introducir el código
 * ************************************
 */
 
?> 
<h3>Validación de número de la Seguridad Social</h3>

<form method="GET" action="">
<input type="hidden" name="p" value="1">
<input type="text" placeholder="Número S.S. entero" size="24" name="nss" 
 maxlength="12">
<input type="submit" value="Validar">
</form>

Código de ejemplo: 281234567840<br><br><br>

<form method="GET" action="">
<input type="hidden" name="p" value="1">
<input type="text" placeholder="CP" size="3" name="na" maxlength="2">/
<input type="text" placeholder="Afiliado" size="10" name="nb" maxlength="8">/
<input type="text" placeholder="DC" size="3" name="nc" maxlength="2">
<input type="submit" value="Validar">
</form>

<b>CP</b> = Código de provincia de 2 dígitos<br>
<b>Afiliado</b> = Número de afiliado de 8 dígitos<br>
<b>DC</b> = Dígito de control de 2 dígitos<br><br>
Código de ejemplo: 28 / 12345678 / 40<br><br><br>

 
 

Se puede ver una demo funcionando en esta dirección:
http://intervia.com/validass

 

 

 

Deja un comentario

Tu dirección de correo electrónico no será publicada.