CUSIP: Difference between revisions

1,150 bytes added ,  4 years ago
(→‎{{header|Haskell}}: corrected "*&#" to "*@#")
Line 2,930:
68389X106 -> incorrect
68389X105 -> correct</pre>
 
=={{header|Wren}}==
{{trans|Go}}
<lang ecmascript>var isCusip = Fn.new { |s|
if (s.count != 9) return false
var sum = 0
for (i in 0..7) {
var c = s[i].bytes[0]
var v
if (c >= 48 && c <= 57) { // '0' to '9'
v = c - 48
} else if (c >= 65 && c <= 90) { // 'A' to 'Z'
v = c - 64
} else if (s[i] == "*") {
v = 36
} else if (s[i] == "@") {
v = 37
} else if (s[i] == "#") {
v = 38
} else {
return false
}
if (i%2 == 1) v = v * 2 // check if odd as using 0-based indexing
sum = sum + (v/10).floor + v%10
}
return s[8].bytes[0] - 48 == (10 - (sum%10)) % 10
}
 
var candidates = [
"037833100",
"17275R102",
"38259P508",
"594918104",
"68389X106",
"68389X105"
]
for (candidate in candidates) {
var b = (isCusip.call(candidate)) ? "correct" : "incorrect"
System.print("%(candidate) -> %(b)")
}</lang>
 
{{out}}
<pre>
037833100 -> correct
17275R102 -> correct
38259P508 -> correct
594918104 -> correct
68389X106 -> incorrect
68389X105 -> correct
</pre>
 
=={{header|Yabasic}}==
9,485

edits