Validador de códigos ISIN

Comparto un validador de códigos ISIN.


¿Qué es el código ISIN?

El código ISIN (International Securities Identification Number) está desarrollado en el estándar internacional ISO 6166 y se utiliza para la identificación de valores mobiliarios. Es un código que identifica unívocamente un valor mobiliario a nivel internacional y tiene una gran acogida en todos los mercados financieros del mundo, que lo han incorporado a sus procesos de liquidación y custodia. El ISIN es un código de 12 caracteres alfanuméricos con la estructura siguiente:

  • Los dos primeros caracteres corresponden al código país según el estándar ISO 3166 de la Agencia de Codificación que asigna el código o del país del emisor del valor según se trate de valores de renta fija, renta variable, warrants, etc., de acuerdo con lo establecido en el estándar ISO 6166.
  • Los siguientes nueve caracteres forman el número básico que puede contener el código nacional de identificación del valor en cada país. La estructura y tamaño de este código quedan al criterio de la Agencia de Codificación del país (Norma Técnica 1/2010, de 28 de julio, de la CNMV, para los valores españoles).
  • El último carácter es un dígito de control.


Public Function ISINCODE(ByVal sISINCode As String) As Boolean
   
   Dim i As Integer: Dim iTotalScore As Integer
   Dim s As String: Dim sDigits As String
   sISINCode = UCase(Trim(sISINCode))
   If Len(sISINCode) <> 12 Then Exit Function
   If Mid(sISINCode, 1, 1) < "A" Or Mid(sISINCode, 1, 1) > "Z" Then Exit Function
   If Mid(sISINCode, 2, 1) < "A" Or Mid(sISINCode, 2, 1) > "Z" Then Exit Function
   sDigits = ""
   For i = 1 To 11
       s = Mid(sISINCode, i, 1)
       If s >= "0" And s <= "9" Then
          sDigits = sDigits & s
       ElseIf s >= "A" And s <= "Z" Then
          sDigits = sDigits & CStr(Asc(s) - 55)
       Else
          Exit Function
       End If
   Next i
   sDigits = StrReverse(sDigits)
   iTotalScore = 0
   For i = 1 To Len(sDigits)
       iTotalScore = iTotalScore + CInt(Mid(sDigits, i, 1))
       If i Mod 2 = 1 Then
          iTotalScore = iTotalScore + CInt(Mid(sDigits, i, 1))
          If CInt(Mid(sDigits, i, 1)) > 4 Then
             iTotalScore = iTotalScore - 9
          End If
       End If
   Next i
   If (10 - (iTotalScore Mod 10)) Mod 10 = CInt(Mid(sISINCode, 12, 1)) Then ISINCODE = True
End Function

Comentarios

Entradas populares de este blog

Convertir un número en letra en español en Excel

Renombrar Archivos o Carpetas