CUSIP: Difference between revisions
Content added Content deleted
m (→Composition of pure functions: Edited a docstring) |
|||
Line 2,436: | Line 2,436: | ||
68389X106 not valid |
68389X106 not valid |
||
68389X105 is valid</pre> |
68389X105 is valid</pre> |
||
=={{header|Visual Basic .NET}}== |
|||
{{trans|C#}} |
|||
<lang vbnet>Module Module1 |
|||
Function IsCUSIP(s As String) As Boolean |
|||
If s.Length <> 9 Then |
|||
Return False |
|||
End If |
|||
Dim sum = 0 |
|||
For i = 0 To 7 |
|||
Dim c = s(i) |
|||
Dim v As Integer |
|||
If "0" <= c AndAlso c <= "9" Then |
|||
v = Asc(c) - 48 |
|||
ElseIf "A" <= c AndAlso c <= "Z" Then |
|||
v = Asc(c) - 64 ' Lower case letters are apparently invalid |
|||
ElseIf c = "*" Then |
|||
v = 36 |
|||
ElseIf c = "#" Then |
|||
v = 38 |
|||
Else |
|||
Return False |
|||
End If |
|||
If i Mod 2 = 1 Then |
|||
v *= 2 ' check if odd as using 0-based indexing |
|||
End If |
|||
sum += v \ 10 + v Mod 10 |
|||
Next |
|||
Return Asc(s(8)) - 48 = (10 - (sum Mod 10)) Mod 10 |
|||
End Function |
|||
Sub Main() |
|||
Dim candidates As New List(Of String) From { |
|||
"037833100", |
|||
"17275R102", |
|||
"38259P508", |
|||
"594918104", |
|||
"68389X106", |
|||
"68389X105" |
|||
} |
|||
For Each candidate In candidates |
|||
Console.WriteLine("{0} -> {1}", candidate, If(IsCUSIP(candidate), "correct", "incorrect")) |
|||
Next |
|||
End Sub |
|||
End Module</lang> |
|||
{{out}} |
|||
<pre>037833100 -> correct |
|||
17275R102 -> correct |
|||
38259P508 -> correct |
|||
594918104 -> correct |
|||
68389X106 -> incorrect |
|||
68389X105 -> correct</pre> |
|||
=={{header|Yabasic}}== |
=={{header|Yabasic}}== |