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}}== |