[REBOL] Re: Optimizations anyone?
From: gregg:pointillistic at: 6-Feb-2008 14:25
Hi Kai,
KP> I just wrote the function below to validate Canadian Social InsuranceKP> numbers
(SIN) and it strikes me as, well, rather awkward.
Looks like SINs use the Luhn algorithm to calc the check digit.
luhn?: func [
card-num [string!]
/local cksum flag val
] [
cksum: 0
card-num: trim/all copy card-num
flag: even? length? card-num
foreach digit card-num [
val: to integer! form digit
if flag [
val: val * 2
if val > 9 [val: val - 9]
; - alt -
;val: pick [0 2 4 6 8 1 3 5 7 9] val + 1
]
cksum: cksum + val
flag: not flag
]
;print cksum
0 = remainder cksum 10
]
-- Gregg