Luhn test of credit card numbers: Difference between revisions
Content added Content deleted
No edit summary |
(Added solution for Action!) |
||
Line 478: | Line 478: | ||
> (luhn 1234567812345670) |
> (luhn 1234567812345670) |
||
T</pre> |
T</pre> |
||
=={{header|Action!}}== |
|||
<lang Action!>PROC ReverseDigits(CHAR ARRAY n,rev) |
|||
BYTE i,j |
|||
i=n(0) |
|||
WHILE i>0 AND n(i)='0 |
|||
DO |
|||
i==-1 |
|||
OD |
|||
j=1 |
|||
WHILE i>0 |
|||
DO |
|||
rev(j)=n(i) |
|||
j==+1 i==-1 |
|||
OD |
|||
rev(0)=j-1 |
|||
RETURN |
|||
BYTE FUNC SumOddDigits(CHAR ARRAY n) |
|||
BYTE sum,i |
|||
sum=0 |
|||
FOR i=1 TO n(0) STEP 2 |
|||
DO |
|||
sum==+ValB(n(i)) |
|||
OD |
|||
RETURN(sum) |
|||
BYTE FUNC SumEvenDigitsMultiplied(CHAR ARRAY n) |
|||
BYTE sum,i,v |
|||
sum=0 |
|||
FOR i=2 TO n(0) STEP 2 |
|||
DO |
|||
v=ValB(n(i))*2 |
|||
IF v>9 THEN v==-9 FI |
|||
sum==+v |
|||
OD |
|||
RETURN(sum) |
|||
BYTE FUNC Luhn(CHAR ARRAY n) |
|||
CHAR ARRAY rev(20) |
|||
BYTE s1,s2 |
|||
ReverseDigits(n,rev) |
|||
s1=SumOddDigits(rev) |
|||
s2=SumEvenDigitsMultiplied(rev) |
|||
IF (s1+s2) MOD 10=0 THEN |
|||
RETURN(1) |
|||
FI |
|||
RETURN(0) |
|||
PROC Test(CHAR ARRAY n) |
|||
PrintF("%S is ",n) |
|||
IF Luhn(n) THEN |
|||
PrintE("valid") |
|||
ELSE |
|||
PrintE("invalid") |
|||
FI |
|||
RETURN |
|||
PROC Main() |
|||
Test("49927398716") |
|||
Test("49927398717") |
|||
Test("1234567812345678") |
|||
Test("1234567812345670") |
|||
RETURN</lang> |
|||
{{out}} |
|||
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Luhn_test_of_credit_card_numbers.png Screenshot from Atari 8-bit computer] |
|||
<pre> |
|||
49927398716 is valid |
|||
49927398717 is invalid |
|||
1234567812345678 is invalid |
|||
1234567812345670 is valid |
|||
</pre> |
|||
=={{header|ActionScript}}== |
=={{header|ActionScript}}== |