-
Notifications
You must be signed in to change notification settings - Fork 0
/
controle_luhn.RPGLE
98 lines (75 loc) · 2.7 KB
/
controle_luhn.RPGLE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
h nomain
dVerif_Luhn PR N
d a_Nombre_Luhn 32768A OPTIONS(*VARSIZE) CONST
dCalcul PR 6 0
d a_Nombre_Luhn 32768A OPTIONS(*VARSIZE) CONST
d a_longueur e 5i 0
D*--------------------------------------------------
D* Procedure name: parite
D* Purpose: Déterminer si un nombre est pair ou impair
D* Returns:
D* Parameter: a_nombre => Nombre dont on vérifie la parité
D*--------------------------------------------------
Dparite PR N
D a_nombre 6P 0 value
pVerif_Luhn b Export
dVerif_Luhn PI N
dg_nbre_luhn 32768A OPTIONS(*VARSIZE) CONST
d g_longueur s 5i 0
d g_valid s 1 0
d g_luhn s N
d g_Nombre_Luhn s 20A Varying
/free
g_Nombre_Luhn=%trim(g_nbre_luhn);
g_longueur=%len(%trim(g_Nombre_Luhn));
g_valid=%rem( calcul(g_Nombre_Luhn:g_longueur):10);
If g_valid=0;
g_Luhn=*on;
Else;
g_Luhn=*off;
ENDIF;
Return g_Luhn;
/end-free
pVerif_Luhn e
pcalcul b
dCalcul PI 6 0
d l_Nombre_Luhn 32768A OPTIONS(*VARSIZE) CONST
d l_longueur 5i 0
d l_pos s 5i 0
d l_total s 6 0
d l_ajout s 2 0
/free
FOR l_pos = l_longueur DOWNTO 1;
// Le corps de la boucle va ici
l_ajout=%dec(%subst(l_Nombre_Luhn:l_pos:1):2:0);
if parite(l_pos);
l_ajout=l_ajout*2;
if l_ajout>9;
l_ajout=l_ajout-9;
ENDIF;
ENDIF;
l_total=l_total+l_ajout;
ENDFOR;
return l_total;
/end-free
pcalcul e
P*--------------------------------------------------
P* Procedure name: parite
P* Purpose: Déterminer di un nombre est pair ou impair
P* Returns:
P* Parameter: a_nombre => Nombre dont on vérifie la parité
P*--------------------------------------------------
P parite B
D parite PI N
D l_nombre 6P 0 value
D* Local fields
D l_reste s 1 0
d l_pair s N inz(*off)
/FREE
l_reste= %rem( l_nombre:2);
if l_reste=0;
l_pair=*on;
ENDIF;
RETURN l_pair;
/END-FREE
P parite E