'********************************************************************************
' 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
               (
geocities.com/es/ensolva/Descargas)                   (
geocities.com/es/ensolva)                   (
geocities.com/es)