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}}== |