ISIN validation code in PL/SQL
Monday, 22.02.2010 – DejanISIN = International Securities Identification Number http://en.wikipedia.org/wiki/International_Securities_Identification_Number
CREATE OR REPLACE FUNCTION sfCheckISIN(pISIN IN VARCHAR2) RETURN NUMBER IS s number := 0; a number; c number; begin a := case length(pISIN) when 12 then 1 else 2 end; for i in reverse 1..length(pISIN) loop c := ascii(substr(pISIN, i, 1)); if c > ascii('9') then c := c - (ascii('A')-10); s := s + trunc((3 - a) * trunc(c / 10) + a * c + (a - 1) * (trunc(mod(c,10))) / 5); else c := c - ascii('0'); s := s + (a * c + (a - 1) * trunc(c / 5)); a := 3 - a; end if; end loop; s := trunc(mod(s, 10)); return trunc(mod(10 - trunc(mod(s, 10)), 10)); end sfCheckISIN; /