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
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
Publicar un comentario