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.
Aquí puedes validar un número de la seguridad social española.
Para saber como se hace la validación y ver un ejemplo de programación en PHP, sigue leyendo.
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 = [];
/*
* Inicializa las variables
* p = switch para el envío
* na = código de provincia
* nb = número de afiliación
* nc = dígito de control
* nss = número S.S. entero
*/
$ini_vars = ['b','na','nb','nc','nss'];
foreach ($ini_vars as $iv) {
${$iv} = preg_replace(
"/[^0-9]/i","",filter_input(
INPUT_GET, $iv, FILTER_SANITIZE_NUMBER_INT
));
if (!isset(${$iv})) {
${$iv} = null;
}
}
//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
Anónimo
gracias
rupo ruci