Jump to content

Luhn test of credit card numbers: Difference between revisions

Added solution for Action!
No edit summary
(Added solution for Action!)
Line 478:
> (luhn 1234567812345670)
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}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.