CUSIP: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (Add BCPL) |
No edit summary |
||
Line 2,509: | Line 2,509: | ||
68389X106: INVALID |
68389X106: INVALID |
||
68389X105: VALID</pre> |
68389X105: VALID</pre> |
||
=={{header|Mathematica}} / {{header|Wolfram Language}}== |
|||
<lang Mathematica>ClearAll[Cusip] |
|||
rules = Thread[(ToString /@ Range[0, 9]) -> Range[0, 9]]~Join~ |
|||
Thread[CharacterRange["A", "Z"] -> Range[26] + 9]~Join~ |
|||
Thread[Characters["*@#"] -> {36, 37, 38}]; |
|||
Cusip[cusip_String] := Module[{s = cusip, sum = 0, c, value, check}, |
|||
If[StringLength[s] != 9, |
|||
Print["Cusip must be 9 characters!"]; |
|||
False |
|||
, |
|||
s = Characters[ToUpperCase[s]]; |
|||
Do[ |
|||
c = s[[i]]; |
|||
value = c /. rules; |
|||
If[EvenQ[i], value *= 2]; |
|||
sum += Floor[value/10] + Mod[value, 10]; |
|||
, |
|||
{i, 8} |
|||
]; |
|||
check = Mod[(10 - Mod[sum, 10]), 10]; |
|||
s[[-1]] === ToString[check] |
|||
] |
|||
] |
|||
Cusip /@ {"037833100", "17275R102", "38259P508", "594918104", "68389X106", "68389X105"}</lang> |
|||
{{out}} |
|||
<pre>{True, True, True, True, False, True}</pre> |
|||
=={{header|Modula-2}}== |
=={{header|Modula-2}}== |