RosettaCodeData/Task/Validate-International-Secu.../YAMLScript/validate-international-secu...

19 lines
371 B
Plaintext

!YS-v0
defn main(*nums):
each isin nums:
say: "$isin - $if(isin:isin? 'valid' 'invalid')"
defn isin?(isin):
isin.re-matches(/[A-Z]{2}[A-Z0-9]{9}[0-9]/) &&
isin.map(b36-10).apply(str):luhn?
defn b36-10(c):
c =: c:I - 48
if c > 9: (c - 7) c
defn luhn?(cc):
map(mul cc:digits:reverse [1 2]:cycle)
.map(\(I(_ / 10) + (_ % 10))):sum
.mod(10):zero?