Luhn test of credit card numbers: Difference between revisions

Content added Content deleted
(Updated D versions)
No edit summary
Line 1,463: Line 1,463:
Comment: it isn't necessary to reverse the string in order
Comment: it isn't necessary to reverse the string in order
to perform the test.
to perform the test.


=={{header|PL/SQL}}==

FUNCTION algoLuhn ( p_numeroVerif VARCHAR2 )
RETURN NUMBER
IS
i NUMBER;
v_NBi SMALLINT;
v_retour SMALLINT;
v_somme NUMBER := 0;
v_nbCar NUMBER;
BEGIN
v_nbCar := LENGTH(p_numeroVerif);
FOR i IN 1..v_nbCar
LOOP
v_NBi := TO_NUMBER(SUBSTR(p_numeroVerif,v_nbCar+1-i,1));
v_somme := v_somme -- Incrément sur l'existant
+ MOD(i,2) * v_nbi -- Si rang impair => on prend la valeur telle quelle => NB
+ MOD(i+1,2) * SIGN(-SIGN(v_Nbi-4)+1) * (2*v_NBi) -- Si rang pair et nombre inférieur ou égal à 4 => (NB * 2)
+ MOD(i+1,2) * SIGN( SIGN(v_Nbi-5)+1) * (2*v_NBi-9) ; -- Si rang pair et nombre supérieur à 4 => (2*NB - 9)
END LOOP;
v_retour := SIGN(MOD(v_somme,10));
RETURN v_retour;
EXCEPTION
WHEN OTHERS
THEN
RETURN 1;
END algoLuhn;


=={{header|PureBasic}}==
=={{header|PureBasic}}==