Visual Basic - AYUDA - Rutina de validación

Life is soft - evento anual de software empresarial
 
Vista:

AYUDA - Rutina de validación

Publicado por CarlaD23 (3 intervenciones) el 28/06/2002 03:47:28
Necesito una rutina de validación de Nros. de Inscripción en Ingresos Brutos del Convenio Multilateral (Argentina), que valide los dígitos verificadores.
Si alguien tiene alguna, aunque sea la lógica o seudocódigo, por favor que me la envíe.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

AYUDA - Rutina de validación

Publicado por Luis (1 intervención) el 23/05/2014 21:27:18
ESTO ES MICRO FOCUS EXTEND 9.2.2 (COBOL).


WORKING

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
77 IDX  PIC  9(3)
            VALUE IS 0.
77 IDX-1            PIC  9(3)
            VALUE IS 0.
77 A    PIC  9(12)
            VALUE IS 0.
78 B VALUE IS 11.
77 C    PIC  9(3)
            VALUE IS 0.
77 D    PIC  9(3)
            VALUE IS 0.
77 E    PIC  9(3)
            VALUE IS 0.
77 V    PIC  9(3)
            VALUE IS 0.
77 F    PIC  99
            VALUE IS 0.
01 PESO-CBU         PIC  9(4)
            VALUE IS 9713.
01 PESO-CBU-R REDEFINES PESO-CBU.
    05 IT-PESO-CBU      PIC  9
                OCCURS 4 TIMES.
01 PESO-CUIT        PIC  9(10)
            VALUE IS 5432765432.
01 PESO-CUIT-R REDEFINES PESO-CUIT.
    05 IT-PESO-CUIT     PIC  9
                OCCURS 10 TIMES.
77 NUMERO           PIC  9
            VALUE IS 0.
01 PESO-IIBB-LOCAL  PIC  9(7)
            VALUE IS 8765432.
01 PESO-IIBB-LOCAL-R REDEFINES PESO-IIBB-LOCAL.
    05 IT-PESO-IIBB-LOCAL           PIC  9
                OCCURS 7 TIMES.
01 PESO-IIBB-CONVENIO           PIC  9(6)
            VALUE IS 139713.
01 PESO-IIBB-CONVENIO-R REDEFINES PESO-IIBB-CONVENIO.
    05 IT-PESO-IIBB-CONVENIO        PIC  9
                OCCURS 6 TIMES.


LINKAGE

1
2
3
4
5
6
7
8
9
10
*
*
01 LNK-DV.
    05 LNK-DV-SELECCION PIC  9.
    05 LNK-DV-IIBB      PIC  X(12).
    05 LNK-DV-VALIDAR-IIBB          PIC  9.
    05 LNK-DV-CUIT      PIC  9(11).
    05 LNK-DV-VALIDAR-CUIT          PIC  9.
    05 LNK-DV-CBU       PIC  X(22).
    05 LNK-DV-VALIDAR-CBU           PIC  9.

PROCEDURE

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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
*----------------------------------------------------------------*
* CHEQUEA DIGITOS VERIFICADORES                                  *
*----------------------------------------------------------------*
*
After-Init.
    EVALUATE LNK-DV-SELECCION
        WHEN 1
            PERFORM VALIDAR-CUIT
        WHEN 2
            PERFORM VALIDAR-IIBB
        WHEN 4
            PERFORM VALIDAR-CBU
        WHEN 3
            PERFORM VALIDAR-CUIT
            PERFORM VALIDAR-IIBB
        WHEN 5
            PERFORM VALIDAR-CUIT
            PERFORM VALIDAR-CBU
        WHEN 6
            PERFORM VALIDAR-IIBB
            PERFORM VALIDAR-CBU
        WHEN 7
            PERFORM VALIDAR-CUIT
            PERFORM VALIDAR-IIBB
            PERFORM VALIDAR-CBU
    END-EVALUATE.
    EXIT PROGRAM.
    STOP RUN.
 
*----------------------------------------------------------------*
* VALIDA CUIT/CUIL                                               *
* 0 = FALSE (CUIT NO ES VALIDO)                                  *
* 1 = TRUE (CUIT VALIDO)                                         *
*----------------------------------------------------------------*
*
VALIDAR-CUIT.
    IF LNK-DV-CUIT NOT NUMERIC OR
        LNK-DV-CUIT = 0
        MOVE 0 TO LNK-DV-Validar-CUIT
        EXIT PARAGRAPH.
    MOVE ZEROS TO A.
    MOVE 0 TO IDX.
    PERFORM UNTIL IDX = 10
            SET IDX UP BY 1
            COMPUTE A = A +
                    (FUNCTION NUMVAL(LNK-DV-CUIT(IDX:1))
                        * IT-PESO-CUIT(IDX))
            END-COMPUTE
    END-PERFORM.
    COMPUTE C = A / B.
    COMPUTE D = B - ( A - ( B * C ) ).
    IF D = 10
        MOVE 9 TO V
        IF V = FUNCTION NUMVAL(LNK-DV-CUIT(11:1))
            MOVE 1 TO LNK-DV-Validar-CUIT
        ELSE
            MOVE 0 TO LNK-DV-Validar-CUIT
        END-IF
        EXIT PARAGRAPH.
    COMPUTE D = B * C.
    IF D = A
        MOVE 0 TO V
        IF V = FUNCTION NUMVAL(LNK-DV-CUIT(11:1))
            MOVE 1 TO LNK-DV-Validar-CUIT
        ELSE
            MOVE 0 TO LNK-DV-Validar-CUIT
        END-IF
        EXIT PARAGRAPH.
    COMPUTE V = B - ( A - ( B * C)).
    IF V = FUNCTION NUMVAL(LNK-DV-CUIT(11:1))
        MOVE 1 TO LNK-DV-Validar-CUIT
    ELSE
        MOVE 0 TO LNK-DV-Validar-CUIT
    END-IF.
*----------------------------------------------------------------*
* VALIDA NUMERO INGRESOS BRUTOS                                  *
*----------------------------------------------------------------*
*
VALIDAR-IIBB.
    MOVE 0 TO LNK-DV-Validar-IIBB.
    IF LNK-DV-IIBB(8:1)  = '-' OR
        LNK-DV-IIBB(4:1)  = '-' AND
        LNK-DV-IIBB(11:1) = '-'
        CONTINUE
    ELSE
        MOVE 0 TO LNK-DV-Validar-IIBB
        EXIT PARAGRAPH.
    IF LNK-DV-IIBB(8:1)  = '-'
        PERFORM VALIDAR-IIBB-LOCAL
    ELSE
        PERFORM VALIDAR-IIBB-CONVENIO.
*
VALIDAR-IIBB-LOCAL.
    MOVE 0 TO IDX A.
    PERFORM UNTIL IDX = 7
            SET IDX UP BY 1
            MOVE LNK-DV-IIBB(IDX:1) TO NUMERO
            COMPUTE A ROUNDED =
                    A + (NUMERO * IT-PESO-IIBB-LOCAL(IDX))
            END-COMPUTE
    END-PERFORM.
    COMPUTE C = A / B.
    COMPUTE D = C * B.
    COMPUTE E = A - D.
    COMPUTE F = B - E.
    MOVE LNK-DV-IIBB(9:2) TO V.
    IF V = F
        MOVE 1 TO LNK-DV-Validar-IIBB
    ELSE
        MOVE 0 TO LNK-DV-Validar-IIBB.
*
VALIDAR-IIBB-CONVENIO.
    MOVE 0 TO IDX A.
    PERFORM UNTIL IDX = 6
            SET IDX UP BY 1
            MOVE LNK-DV-IIBB(IDX + 4:1) TO NUMERO
            COMPUTE A ROUNDED =
                    A + (NUMERO * IT-PESO-IIBB-CONVENIO(IDX))
            END-COMPUTE
    END-PERFORM.
    COMPUTE C = A / B.
    COMPUTE D = C * B.
    COMPUTE E = A - D.
    COMPUTE F = B - E.
    MOVE LNK-DV-IIBB(12:1) TO V.
    IF V = F
        MOVE 1 TO LNK-DV-Validar-IIBB
    ELSE
        MOVE 0 TO LNK-DV-Validar-IIBB.
 
*----------------------------------------------------------------*
* VALIDA CBU                                                     *
*----------------------------------------------------------------*
*
VALIDAR-CBU.
    If LNK-DV-CBU NOT NUMERIC
        MOVE 0 TO LNK-DV-Validar-CBU
        EXIT PARAGRAPH
    END-IF.
*
* Verifica 8º Dígito
*
    MOVE 0 TO A,
    MOVE 5 TO IDX-1
    MOVE 8 TO IDX
 
    PERFORM UNTIL IDX = 1
        SET IDX, IDX-1 DOWN BY 1
        COMPUTE A =
                A +
                (FUNCTION NUMVAL(LNK-DV-CBU(IDX:1))
                * IT-PESO-CBU(IDX-1))
        END-COMPUTE
        IF IDX-1 = 1
            MOVE 5 TO IDX-1
        END-IF
    END-PERFORM.
 
    COMPUTE V =
            FUNCTION MOD(FUNCTION MOD(10 - A, 10), 10)
    END-COMPUTE.
 
    IF FUNCTION NUMVAL(LNK-DV-CBU(8:1)) NOT = V
        MOVE 0 TO LNK-DV-Validar-CBU
        Exit Paragraph
    END-IF.
*
* Verifica 22º Dígito
*
    MOVE 0 TO A
    MOVE 5 TO IDX-1
    MOVE 22 TO IDX
 
    PERFORM UNTIL IDX = 9
        SET IDX, IDX-1 DOWN BY 1
        COMPUTE A =
                A +
                (FUNCTION NUMVAL(LNK-DV-CBU(IDX:1))
                    * IT-PESO-CBU(IDX-1))
        END-COMPUTE
        IF IDX-1 = 1
            MOVE 5 TO IDX-1
        END-IF
    END-PERFORM.
 
    COMPUTE V =
            FUNCTION MOD(FUNCTION MOD(10 - A, 10), 10)
    END-COMPUTE.
 
    IF FUNCTION NUMVAL(LNK-DV-CBU(22:1)) NOT = V
        MOVE 0 TO LNK-DV-Validar-CBU
        Exit Paragraph
    END-IF.
    MOVE 1 TO LNK-DV-Validar-CBU.


PASARON 12 AÑOS NADA MÁS.

SALUDOS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA - Rutina de validación

Publicado por Sergio Cuba (1 intervención) el 06/04/2016 20:34:35
Alguien que lo pueda traducir a C o C# o VB o algo un poco mas actual ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar