Access - ¿Cómo calcular dígito verificador en access?

 
Vista:
sin imagen de perfil

¿Cómo calcular dígito verificador en access?

Publicado por Gonzalo (2 intervenciones) el 24/06/2015 17:41:03
En mi trabajo están empezando a trabajar con rapipago, un servicio de pago en argentina. El sistema necesita unos datos en código de barras, esto ya lo tenemos resuelto, el tema es que necesesita un código verificador como ultimo numero según estas especificaciones:

A) Empezando por la primera posición del string a calcular, asignarle la siguiente secuencia : 1,3,5,7,9,3,5,7,9.. (la secuencia 3,5,7 y 9 sera repetida tantas veces como sea necesario)

B) Realizar el producto de cada elemento de la secuencia por el elemento correspondiente de la serie a verificar.

c) Sumar los productos.

d) Dividir el resultado de la suma por 2

e) Tomar solo la parte entera y dividirla por 10(Modulo 10). El resto será el Dígito Verificador.

Ejemplo:

3 0 6 0 0 2 0 5 0 8 5

a. 1 3 5 7 9 3 5 7 9 3 5

b. 3 0 30 0 0 6 0 35 0 24 25 = c. 123

d. 61,5

e. 61/10

Digito Verificador 1

Consegui este codigo, pero al llamarlo desde una consulta me da error

Public Function CodigoBarra(CodBarras)
'Calculo de los Dígitos Verificadores
Dim PriDig As Double
Dim SegDig As Double
'1 0 5 9 0 0 0 0 5 0 0 0 0 8 2 5 4 0 0 0 0 0 0 0 0 0 0 0 0 4 7 0 0 0 0 0 2 9 0 9 0 0 0
'1 3 5 7 9 3 5 7 9 3 5 7 9 3 5 7 9 3 5 7 9 3 5 7 9 3 5 7 9 3 5 7 9 3 5 7 9 3 5 7 9 3 5
'1+ 25+63+45 +24+10+35+36 +12+35+18+27 +63 +54 +5 +63 '516

PriDig = Mid(CodBarras, 1, 1) * 1 + _
Mid(CodBarras, 2, 1) * 3 + _
Mid(CodBarras, 3, 1) * 5 + _
Mid(CodBarras, 4, 1) * 7 + _
Mid(CodBarras, 5, 1) * 9 + _
Mid(CodBarras, 6, 1) * 3 + _
Mid(CodBarras, 7, 1) * 5 + _
Mid(CodBarras, 8, 1) * 7 + _
Mid(CodBarras, 9, 1) * 9 + _
Mid(CodBarras, 10, 1) * 3 + _
Mid(CodBarras, 11, 1) * 5 + _
Mid(CodBarras, 12, 1) * 7 + _
Mid(CodBarras, 13, 1) * 9 + _
Mid(CodBarras, 14, 1) * 3 + _
Mid(CodBarras, 15, 1) * 5

PriDig = PriDig + Mid(CodBarras, 16, 1) * 7 + _
Mid(CodBarras, 17, 1) * 9 + _
Mid(CodBarras, 18, 1) * 3 + _
Mid(CodBarras, 19, 1) * 5 + _
Mid(CodBarras, 20, 1) * 7 + _
Mid(CodBarras, 21, 1) * 9 + _
Mid(CodBarras, 22, 1) * 3 + _
Mid(CodBarras, 23, 1) * 5 + _
Mid(CodBarras, 24, 1) * 7 + _
Mid(CodBarras, 25, 1) * 9 + _
Mid(CodBarras, 26, 1) * 3 + _
Mid(CodBarras, 27, 1) * 5 + _
Mid(CodBarras, 28, 1) * 7 + _
Mid(CodBarras, 29, 1) * 9 + _
Mid(CodBarras, 30, 1) * 3

PriDig = PriDig + Mid(CodBarras, 31, 1) * 5 + _
Mid(CodBarras, 32, 1) * 7 + _
Mid(CodBarras, 33, 1) * 9 + _
Mid(CodBarras, 34, 1) * 3 + _
Mid(CodBarras, 35, 1) * 5 + _
Mid(CodBarras, 36, 1) * 7 + _
Mid(CodBarras, 37, 1) * 9 + _
Mid(CodBarras, 38, 1) * 3 + _
Mid(CodBarras, 39, 1) * 5 + _
Mid(CodBarras, 40, 1) * 7 + _
Mid(CodBarras, 41, 1) * 9 + _
Mid(CodBarras, 42, 1) * 3 + _
Mid(CodBarras, 43, 1) * 5
PriDig = PriDig / 2
PriDig = Left(TextoPostAlaComa(Format(TextoPrevioAlaComa(CStr(PriDig)) / 10, "0.00")), 1)
CodBarras = CodBarras & PriDig
End Function

Me podrian orientar un poco porque la verdad no se como hacerlo, Gracias!!
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
sin imagen de perfil

¿Cómo calcular dígito verificador en access?

Publicado por Gonzalo (2 intervenciones) el 24/06/2015 22:42:43
Muchas gracias por la respuesta, ya pude hacer funcionar el codigo pero hasta esta parte

PriDig = Left(TextoPostAlaComa(Format(TextoPrevioAlaComa(CStr(PriDig)) / 10, "0.00")), 1)

Parece que hay un error en la parte TextoPostAlaComa y TextoPrevioAlaComa, gracias por la ayuda!
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
Imágen de perfil de Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

¿Cómo calcular dígito verificador en access?

Publicado por Neckkito (1157 intervenciones) el 24/06/2015 23:27:47
Hola!

Aunque te he respondido por otra vía, te copio aquí mi respuesta por si puede ayudar a alguien más:

<<Hola!

Mira si este ejemplo puede servirte: http://www.mediafire.com/download/nn0n0yynd8ppuay

Yo he hecho varias pruebas y parece que funciona bien, pero somételo a algunos testeos más para asegurar.

Ya me dirás.

Un saludo,>>

Saludos,
firmaMail
http://neckkito.siliconproject.com.ar/
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
sin imagen de perfil

¿Cómo calcular dígito verificador en access?

Publicado por Enrique Heliodoro (1664 intervenciones) el 26/06/2015 01:31:01
Esta es otra via de solución, si la longitud del texto SIEMPRE es igual (4 * [numero caracteres]) +1 , sobraría la verificación de las líneas 3, 4 y 5 del bucle (quitar hasta el Then, el incluido)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Function fncDigit(miCodigo As String) As Long
If Len(Trim(miCodigo)) = 0 Then fncDigit = -1: Exit Function
Dim NN As Long, LgTex As Long
LgTex = Len(miCodigo)
fncDigit = Mid(miCodigo, 1, 1)
For NN = 2 To LgTex - 2 Step 3
    fncDigit = fncDigit + (Mid(miCodigo, NN, 1) * 3)
    If NN + 1 <= LgTex Then fncDigit = fncDigit + (Nz(Mid(miCodigo, NN + 1, 1), 0) * 5)
    If NN + 2 <= LgTex Then fncDigit = fncDigit + (Nz(Mid(miCodigo, NN + 2, 1), 0) * 7)
    If NN + 3 <= LgTex Then fncDigit = fncDigit + (Nz(Mid(miCodigo, NN + 3, 1), 0) * 9)
    Next NN
fncDigit = fncDigit \ 2
fncDigit = fncDigit Mod 10
End Function
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
sin imagen de perfil

¿Cómo calcular dígito verificador en access?

Publicado por Enrique Heliodoro (1664 intervenciones) el 26/06/2015 02:12:56
He corregido la función (el bucle no actua correctamente, comenzando por tomar caracteres de tres en tres y es de cuatro en cuatro)


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
Public Function fncDigit(TextCod As String) As Long
 'verificamos que la cadena tenga una longitud mayor que cero y sin espacios delante/detrás, si hay error sale con un -1
If Len(Trim(TextCod)) = 0 Then fncDigit = -1: Exit Function
 ' dimensionamos las variables para bucle y (para evitar reiterar la función LEN), la longitud del texto
Dim NN As Long, LgTex As Long
 ' asignamos valores, aquí la longitud del texto
LgTex = Len(TextCod)
' si el texto no cumple las caracteristicas, rellenamos con ceros para que tenga multiplos de (4 ) + 1 caracteres
If (LgTex - 1) Mod 4 <> 0 Then TextCod = TextCod + String(4 - (LgTex - 1) Mod 4, "0")
' recalculamos la longitd
LgTex = Len(TextCod)
 ' aquí asignamos el valor del primer digito
fncDigit = Mid(TextCod, 1, 1)
 ' tomamos los valores de cuatro en cuatro (multiplicadores 3, 5, 7, 9)
For NN = 2 To LgTex - 1 Step 4
 ' el primer digito del cuarteto
fncDigit = fncDigit + (Mid(TextCod, NN, 1) * 3)
 ' el segundo
 fncDigit = fncDigit + (Nz(Mid(TextCod, NN + 1, 1), 0) * 5)
 ' el tercero
fncDigit = fncDigit + (Nz(Mid(TextCod, NN + 2, 1), 0) * 7)
'finalmente el cuarto
fncDigit = fncDigit + (Nz(Mid(TextCod, NN + 3, 1), 0) * 9)
 ' ... y continuamos
 Next NN
 ' dividimos por dos tomando solo la parte entera
fncDigit = fncDigit \ 2
 ' calculamos el resto y lo asignamos como salida
  fncDigit = fncDigit Mod 10
 End Function
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