'********************************************************************************
' 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

    Source: geocities.com/es/ensolva/Descargas/Documentos

               ( geocities.com/es/ensolva/Descargas)                   ( geocities.com/es/ensolva)                   ( geocities.com/es)