Data update
This commit is contained in:
parent
4bb20c9b71
commit
cbaf4c4b64
12390 changed files with 318560 additions and 27248 deletions
70
Task/CUSIP/Pascal-P/cusip.pas
Normal file
70
Task/CUSIP/Pascal-P/cusip.pas
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
program cusip(output);
|
||||
|
||||
const
|
||||
cusiplen = 9;
|
||||
|
||||
type
|
||||
tcusip = array [1 .. cusiplen] of char;
|
||||
|
||||
function cusipcheckdigit(cusip: tcusip): integer;
|
||||
(* Check digit *)
|
||||
var
|
||||
i, sum, v: integer;
|
||||
c: char;
|
||||
contcheck: boolean; (* Continue checking? *)
|
||||
begin
|
||||
i := 1;
|
||||
sum := 0;
|
||||
contcheck := true;
|
||||
while (i <= cusiplen) and contcheck do
|
||||
begin
|
||||
c := cusip[i];
|
||||
if ('0' <= c) and (c <= '9') then v := ord(c) - 48
|
||||
else if ('A' <= c) and (c <= 'Z') then v := ord(c) - 65 + 10
|
||||
else if c = '*' then v := 36
|
||||
else if c = '@' then v := 37
|
||||
else if c = '#' then v := 38
|
||||
else
|
||||
begin
|
||||
cusipcheckdigit := -1;
|
||||
contcheck := false;
|
||||
end;
|
||||
if contcheck then
|
||||
begin
|
||||
if (i - 1) mod 2 = 1 then v := 2 * v;
|
||||
if i <= 8 then sum := sum + (v div 10) + (v mod 10);
|
||||
i := i + 1;
|
||||
end;
|
||||
end;
|
||||
if contcheck then
|
||||
if i <> 10 then cusipcheckdigit := -1
|
||||
else cusipcheckdigit := (10 - (sum mod 10)) mod 10;
|
||||
end;
|
||||
|
||||
function isvalidcusip(cusip: tcusip): boolean;
|
||||
var
|
||||
check: integer;
|
||||
begin
|
||||
check := cusipcheckdigit(cusip);
|
||||
if check < 0 then isvalidcusip := false
|
||||
else isvalidcusip := (ord(cusip[9]) = ord(48 + check));
|
||||
end;
|
||||
|
||||
procedure writeverdict(cusip: tcusip);
|
||||
(* Write the verdict *)
|
||||
begin
|
||||
write(cusip);
|
||||
if isvalidcusip(cusip) then writeln(' : Valid')
|
||||
else writeln(' : Invalid');
|
||||
end;
|
||||
|
||||
begin
|
||||
writeln('CUSIP Verdict');
|
||||
writeverdict('037833100');
|
||||
writeverdict('17275R102');
|
||||
writeverdict('38259P508');
|
||||
writeverdict('594918104');
|
||||
writeverdict('68389X106');
|
||||
writeverdict('68389X105');
|
||||
(* readln; *)
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue