40 lines
869 B
Plaintext
40 lines
869 B
Plaintext
string 0; \use zero-terminated strings
|
|
|
|
func Valid(Cusip); \Return 'true' if valid CUSIP code
|
|
char Cusip;
|
|
int Sum, I, C, V;
|
|
[Sum:= 0;
|
|
for I:= 0 to 8-1 do
|
|
[C:= Cusip(I);
|
|
ChOut(0, C);
|
|
case of
|
|
C>=^0 & C<=^9: V:= C-^0;
|
|
C>=^A & C<=^Z: V:= C-^A+10;
|
|
C=^*: V:=36;
|
|
C=^@: V:=37;
|
|
C=^#: V:=38
|
|
other V:= -1;
|
|
if I&1 then V:= V*2;
|
|
Sum:= Sum + V/10 + rem(0);
|
|
];
|
|
C:= Cusip(I);
|
|
ChOut(0, C);
|
|
V:= rem( (10-rem(Sum/10)) / 10 );
|
|
return V = C-^0;
|
|
];
|
|
|
|
int Cusip, N;
|
|
[Cusip:= ["037833100",
|
|
"17275R102",
|
|
"38259P508",
|
|
"594918104",
|
|
"68389X106",
|
|
"68389X105"];
|
|
for N:= 0 to 6-1 do
|
|
[Text(0, if Valid(Cusip(N))
|
|
then " is valid"
|
|
else " is invalid");
|
|
CrLf(0);
|
|
];
|
|
]
|