'******************************************************************************** ' Nombre: ValidarNumSegSocial ' por Enrique Martínez Montejo - 25/09/00 ' ' Versión: 1.0 ' ' Finalidad: Validar el dígito de control de un CCC/NAF de la Seguridad Social ' ' Parámetros: ' sNumSegSocial: Número cuyo dígito se desea valir. La función retornará ' en dicho parámetro el número correcto. ' ' Resultados: ' Boolean: True/False ' '******************************************************************************** Private Function ValidarNumSegSocial(ByRef sNumSegSocial As String) As Boolean Dim iDC As Integer, iDCTemp As Integer, iPos As Integer Dim sNumSegSocialTemp As String, sTempNumOriginal As String ' Tanto el Código de Cuenta de Cotización (CCC) de la Empresa, ' como el Nº de Afiliación (NAF) del trabajador, se componen ' de un número de 11 y 12 cifras respectivamente, donde las dos ' primeras corresponde al código de la provincia emisora y las ' dos últimas al dígito de control (DC) del número. ' 1º) Al número pasado, le quitamos las cifras del DC, ' para posteriormente validarlo con el DC calculado iDCTemp = CInt(Right(sNumSegSocial, 2)) sTempNumOriginal = Mid(sNumSegSocial, 1, Len(sNumSegSocial) - 2) ' 2º) Comprobamos la longitud del número pasado en el argumento Select Case Len(sNumSegSocial) Case 11 ' Número de Empresa ' Sólo quitamos el DC sNumSegSocialTemp = Left(sNumSegSocial, 2) & _ Mid(sNumSegSocial, 3, 7) Case 12 ' Número de Trabajador ' Los números nuevos de afiliación se distinguen ' de los antiguos en que la tercera cifra es distinta ' de cero iPos = CInt(Mid(sNumSegSocial, 3, 1)) If iPos = 0 Then ' Se trata de un NAF antiguo, por lo que le ' quitamos la tercera cifra, y los DC sNumSegSocialTemp = Left(sNumSegSocial, 2) & _ Mid(sNumSegSocial, 4, 7) Else ' Es un NAF nuevo: sólo quitamos el DC sNumSegSocialTemp = Left(sNumSegSocial, 2) & _ Mid(sNumSegSocial, 3, 8) End If Case Else ' El número no es válido sNumSegSocial = vbNullString Exit Function End Select ' 3º) Calculamos el verdadero dígito de control iDC = CInt(sNumSegSocialTemp - ((Int(sNumSegSocialTemp / 97)) * 97)) ' 4º) Validamos el dígito de control If iDC = iDCTemp Then ' Es correcto ValidarNumSegSocial = True Else ' No es correcto ' En el parámetro pasado a la función, ' devolvemos el número de CCC/NAF correcto sNumSegSocial = sTempNumOriginal & CStr(iDC) End If End Function