Lotus Approach - digito verificador 11 para fenix

 
Vista:

digito verificador 11 para fenix

Publicado por pinky (104 intervenciones) el 30/10/2007 13:11:12
Ya he dado con tu problema para haecer un numero en digito 11 esta es la relacion de campos que debes crear:

Nombre de campo Tipo de datosTamaño Fórmula / Opciones
Id Tarjeta Numérico 10.2 N° de serie automático
Tarjeta Numérico 10.0
**********************************************************************************
le llamaremos "tarjeta" al campo numerico a introducir, los demas campos son
para rellenar la cadena hasta un maximo de 10 digitos( se puede hacer de mas
*************************************************************************************
sumarcadena Calculado Fijo LONGITUD(Tarjeta)
llenar 10 Calculado Fijo LLENAR(0; 10 - sumarcadena)
tarjetal 0 Calculado Fijo COMBIN("llenar 10"; Tarjeta)
**********************************************************************************
los campos e* "despieza"cadena de numeros
*********************************************************************************
e9 Calculado Fijo DERECHA(tarjetal0; 9)
e8 Calculado Fijo DERECHA(e9; 8)
e7 Calculado Fijo DERECHA(e8; 7)
e6 Calculado Fijo DERECHA(e7; 6)
e5 Calculado Fijo DERECHA(e6; 5)
e4 Calculado Fijo DERECHA(e5; 4)
e3 Calculado Fijo DERECHA(e4; 3)
e2 Calculado Fijo DERECHA(e3; 2)
************************************************************************
los campos n* " separan uno a uno los numeros en campos distintos
*********************************************************************
n1 Calculado Fijo IZDA(tarjetal0; 1)
n2 Calculado Fijo IZDA(e9; 1)
n3 Calculado Fijo IZDA(e8; 1)
n4 Calculado Fijo IZDA(e7; 1)
n5 Calculado Fijo IZDA(e6; 1)
n6 Calculado Fijo IZDA(e5; 1)
n7 Calculado Fijo IZDA(e4; 1)
n8 Calculado Fijo IZDA(e3; 1)
n9 Calculado Fijo IZDA(e2; 1)
n10 Calculado Fijo DERECHA(e2; 1)
***************************************************************************
los campos xd* multiplican unidad*2 decena*3 centena*4 ,etc
**********************************************************************
xdl Calculado Fijo n10 * 2
xd2 Calculado Fijo n9 * 3
xd3 Calculado Fijo n8 * 4
xd4 Calculado Fijo n7 * 5
xd5 Calculado Fijo n6 * 6
xd6 Calculado Fijo n5 * 7
xd7 Calculado Fijo n4 * 8
xd8 Calculado Fijo n3 * 9
xd9 Calculado Fijo n2 * 10
xdl 0 Calculado Fijo n1 * 11
**************************************************************
por fin la suma de todos y te he puesto el resto en otro campo,aunque pueden ir juntos en la misma formula
***********************************************************************
sumatoria Calculado Fijo(xdl + xd2 + xd3 + xd4 + xd5 + xd6 + xd7 + xd8 + xd9 + xd10) * 10
resto Calculado Fijo RESTO(sumatoria; 11)
******************************************************
el campo final digito11 te dara la combinacion del numero primario + un guion + el digito en cuestion
*******************************
DIGITO11 Calculado Fijo COMBIN(Tarjeta; '-'; resto)

Siento no haberme puesto antes con ello.Saludos
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

RE:digito verificador 11 para fenix

Publicado por fenix (97 intervenciones) el 30/10/2007 15:39:53
Te agradesco Pinky.

Pero me parece que hay algunas imprecisiones en la descomposicion de la formula para obtener el DV modulo 11. Me parece que el problema esta cuando multiplicas
xd7 = n4 * 8..., osea que tu factor de multiplicacion debe estar en el rango 2..7.
Te envio el script que hice y un link para la formula:
//es.wikipedia.org/wiki/D%C3%ADgito_verificador

Espero tus comentarios.

Sub DigVerificacion (campo As Variant)
' Factor Multiplicador
mFr = "234567"

Dim mDv(4,3)

' Contiene el Centro de Costo pre-Dv
CurrentView.Body.ccosto.Text = Right$(Rtrim(Str(Val(campo)+10000)),4)
CurrentView.Body.ccosto2.Text = Right$(Rtrim(Str(Val(campo)+10000)),4)


' Rellena Matriz y Genera el Calculo para DV
i = 1
j = 0
mTot = 0
Do While j < 4
j = j + 1
mDv(j,1) = Mid(campo,j,1)
mDv(j,2) = Mid(mFr, i, 1)
mDv(j,3) = Val(mDv(j,1)) * Val(mDv(j,2))
mTot = mTot + mDv(j,3)
i = i + 1
If i > 6 Then
i = 1
End If
Loop
' Optiene el Residuo para el Modulo 11
mResiduo = mTot Mod 11

' Opteniendo Digito Verificador
mDver = 11 - mResiduo
Select Case mDver
Case 11
mDver = "0"
Case 10
mDver = "K"
Case other
mDver = Str(mDver)
End Select

' Se concatena el Dv al CCosto
CurrentView.Body.ccosto2.Text = CurrentView.Body.ccosto2.Text & "-" & mDver

End Sub
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

RE:digito verificador 11 para fenix

Publicado por pinky (104 intervenciones) el 31/10/2007 09:54:04
La macro mia creo que esta bien, lo he probado y esta hecha para numeros de hasta 10 digitos ....si no los tiene los 10 digitos la macro los rellena con ceros a la izda, luego el valor total al ser un numero los desprecia
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