Swell, the last digit to check is the ninth. The difference between the nearest larger multiple of ten should correspond to the tenth digit. So with a slight adjustment of the number of i, you function worked, which I show by using the common personal identity number with repeated 12 and by adding a flag for the result being correct or not. Thanks. data _null_; x = '1212121212'; sum = 0; do i = 1 to 9; sumi = input(substr(x,i,1),1.); if mod(i,2) = 1 then do; sumi = sumi * 2; if sumi > 9 then sumi = sumi - 9; end; sum + sumi; put i=; put sumi=; end; put sum=; check = mod(sum,10); put check=; if (int(check/10)+1)*10-check=substr(x,10,1) then do; correct=1; end; else do; correct=0; end; put correct=; run;
... View more