Data update
This commit is contained in:
parent
4bb20c9b71
commit
cbaf4c4b64
12390 changed files with 318560 additions and 27248 deletions
89
Task/CUSIP/Loglan82/cusip.loglan82
Normal file
89
Task/CUSIP/Loglan82/cusip.loglan82
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
(* CUSIP *)
|
||||
|
||||
block
|
||||
|
||||
unit check_digit: function (cusip: string): integer;
|
||||
var
|
||||
sum, v, i_first, i_last, i: integer,
|
||||
c: character,
|
||||
check_needed: boolean,
|
||||
ccusip: arrayof character;
|
||||
begin
|
||||
sum := 0;
|
||||
ccusip := unpack(cusip);
|
||||
i, i_first := lower(ccusip);
|
||||
i_last := upper(ccusip);
|
||||
check_needed := true;
|
||||
while (i < i_last) and check_needed
|
||||
do
|
||||
c := ccusip(i);
|
||||
if ord(c) >= ord('0') and ord(c) <= ord('9')
|
||||
then
|
||||
v := ord(c) - ord('0')
|
||||
else
|
||||
if ord('A') <= ord(c) and ord(c) <= ord('Z')
|
||||
then
|
||||
v := ord(c) - ord('A') + 10
|
||||
else
|
||||
case c
|
||||
when '*': v := 36;
|
||||
when '@': v := 37;
|
||||
when '#': v := 38;
|
||||
otherwise
|
||||
result := -1;
|
||||
check_needed := false
|
||||
esac
|
||||
fi
|
||||
fi;
|
||||
if check_needed
|
||||
then
|
||||
if (i - i_first) mod 2 = 1 then v := 2 * v fi;
|
||||
if i - i_first <= 7 then sum := sum + v div 10 + v mod 10 fi;
|
||||
i := i + 1
|
||||
fi;
|
||||
od;
|
||||
if check_needed
|
||||
then
|
||||
if i - i_first =/= 8
|
||||
then
|
||||
result := -1
|
||||
else
|
||||
result := (10 - sum mod 10) mod 10
|
||||
fi;
|
||||
fi;
|
||||
end check_digit;
|
||||
|
||||
unit is_valid: function (cusip: string): boolean;
|
||||
var
|
||||
check: integer,
|
||||
ccusip: arrayof character;
|
||||
begin
|
||||
check := check_digit(cusip);
|
||||
if check < 0
|
||||
then
|
||||
result := false
|
||||
else
|
||||
ccusip := unpack(cusip);
|
||||
result := ord(ccusip(lower(ccusip) + 8)) = ord('0') + check
|
||||
fi;
|
||||
end is_valid;
|
||||
|
||||
unit write_verdict: procedure (cusip: string);
|
||||
begin
|
||||
if is_valid(cusip)
|
||||
then
|
||||
writeln(cusip, " : Valid")
|
||||
else
|
||||
writeln(cusip, " : Invalid")
|
||||
fi
|
||||
end write_verdict;
|
||||
|
||||
begin
|
||||
writeln("CUSIP Verdict");
|
||||
call write_verdict("037833100");
|
||||
call write_verdict("17275R102");
|
||||
call write_verdict("38259P508");
|
||||
call write_verdict("594918104");
|
||||
call write_verdict("68389X106");
|
||||
call write_verdict("68389X105");
|
||||
end;
|
||||
Loading…
Add table
Add a link
Reference in a new issue