CUSIP: Difference between revisions

Content added Content deleted
(Add Swift)
(Added Dyalect programming language)
Line 737: Line 737:
68389X106 : Invalid
68389X106 : Invalid
68389X105 : Valid</pre>
68389X105 : Valid</pre>

=={{header|Dyalect}}==

{{trans|Go}}

<lang dyalect>func isCusip(s) {
if s.len() != 9 { return false }
var sum = 0
for i in 0..7 {
var c = s[i]
var v =
match c {
'0'..'9' => Integer(c) - 48,
'A'..'Z' => Integer(c) - 64,
'*' => 36,
'@' => 37,
'#' => 38,
_ => false
}
if i % 2 == 1 { v *= 2 }
sum += v / 10 + v % 10
}
Integer(s[8]) - 48 == (10 - (sum % 10)) % 10
}
var candidates = [
"037833100",
"17275R102",
"38259P508",
"594918104",
"68389X106",
"68389X105"
]

for candidate in candidates {
var b =
if isCusip(candidate) {
"correct"
} else {
"incorrect"
}
print("\(candidate) -> \(b)")
}</lang>

{{out}}

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


=={{header|Factor}}==
=={{header|Factor}}==