CUSIP: Difference between revisions

Content added Content deleted
No edit summary
Line 4,208: Line 4,208:
68389X106 -> incorrect
68389X106 -> incorrect
68389X105 -> correct</pre>
68389X105 -> correct</pre>

=={{header|Vlang}}==
{{trans|Go}}
<lang vlang>fn is_cusip(s string) bool {
if s.len != 9 { return false }
mut sum := 0
for i in 0..8 {
c := s[i]
mut v :=0
match true {
c >= '0'[0] && c <= '9'[0] {
v = c - 48
}
c >= 'A'[0] && c <= 'Z'[0] {
v = c - 55
}
c == '*'[0] {
v = 36
}
c == '@'[0] {
v = 37
}
c == '#'[0] {
v = 38
}
else {
return false
}
}
if i % 2 == 1 { v *= 2 } // check if odd as using 0-based indexing
sum += v/10 + v%10
}
return int(s[8]) - 48 == (10 - (sum%10)) % 10
}
fn main() {
candidates := [
"037833100",
"17275R102",
"38259P508",
"594918104",
"68389X106",
"68389X105",
]
for candidate in candidates {
mut b :=' '
if is_cusip(candidate) {
b = "correct"
} else {
b = "incorrect"
}
println("$candidate -> $b")
}
}</lang>

{{out}}
<pre>
037833100 -> correct
17275R102 -> correct
38259P508 -> correct
594918104 -> correct
68389X106 -> incorrect
68389X105 -> correct
</pre>


=={{header|Wren}}==
=={{header|Wren}}==