Función personalizada

06/07/2010 - 06:24 por ElProfe | Informe spam
Amigos del foro:

Hace algun tiempo "KL" me indicó un código para una función
personalizada y era el siguiente:

Function DC(Numero As String) As Integer
Dim Mult As Variant, i As Integer, SumaProd As Double
Dim Digito As Integer, RES As Integer
Mult = Array(71, 67, 59, 53, 47, 43, 41, 37, 29, 23, 19, 17, 13,
7, 3)
For i = 1 To Len(Numero)
Digito = Mid(Numero, i, 1)
SumaProd = SumaProd + Digito * Mult(i - 1)
Next i
RES = SumaProd Mod 11
Select Case RES
Case 0, 1
DC = 0
Case 1
DC = 1
Case Else
DC = 11 - RES
End Select
End Function

El anterior código toma las dos matrices y las multiplica de la
siguiente manera:

Constantes: 71, 67, 59, 53, 47, 43, 41, 37, 29, 23, 19, 17, 13, 7,
3
Número dado: 8, 0, 0, 1, 9, 7, 2, 6, 8, 0, 0,
0, 0, 0, 0
Pruducto: 568, 0, 0, 53,423,301,82,222,232, 0, 0, 0, 0, 0, 0

Lo que realmente se pretende es que las multiplique de la siguiente
manera

Constantes: 71, 67, 59, 53, 47, 43, 41, 37, 29, 23, 19,
17, 13, 7, 3
Número dado: 0, 0, 0, 0, 0, 0, 8, 0, 0,
1, 9, 7, 2, 6, 8
Pruducto: 0, 0, 0, 0, 0, 0,328, 0, 0,
23,171,119, 26, 42, 24

Debo modificar la forma como la función lee el "número dado", ya que
las posiciones de la izquierda deben ser llenadas con ceros.

El resultado correcto (con la segunda opcion) es cuatro (4), pero
actualmente me está dando cero (0) porque el "número dado" se
justifica a la izquierda y no a la derecha como es correcto.

Anticipo mis agradecimientos a todos y desde luego a "KL" si mira mi
inquietud.

Cordial saludo,

ElProfe
 

Leer las respuestas

#1 L. Garcia
06/07/2010 - 08:42 | Informe spam
Hola:

Pon simplemente esto antes de procesar Numero, con tantos ceros como
posiciones tienes para multiplicar.

Numero = Format$(Val(Numero), "000000000")

Saludos

"ElProfe" escribió en el mensaje
news:
Amigos del foro:

Hace algun tiempo "KL" me indicó un código para una función
personalizada y era el siguiente:

Function DC(Numero As String) As Integer
Dim Mult As Variant, i As Integer, SumaProd As Double
Dim Digito As Integer, RES As Integer
Mult = Array(71, 67, 59, 53, 47, 43, 41, 37, 29, 23, 19, 17, 13,
7, 3)
For i = 1 To Len(Numero)
Digito = Mid(Numero, i, 1)
SumaProd = SumaProd + Digito * Mult(i - 1)
Next i
RES = SumaProd Mod 11
Select Case RES
Case 0, 1
DC = 0
Case 1
DC = 1
Case Else
DC = 11 - RES
End Select
End Function

El anterior código toma las dos matrices y las multiplica de la
siguiente manera:

Constantes: 71, 67, 59, 53, 47, 43, 41, 37, 29, 23, 19, 17, 13, 7,
3
Número dado: 8, 0, 0, 1, 9, 7, 2, 6, 8, 0, 0,
0, 0, 0, 0
Pruducto: 568, 0, 0, 53,423,301,82,222,232, 0, 0, 0, 0, 0, 0

Lo que realmente se pretende es que las multiplique de la siguiente
manera

Constantes: 71, 67, 59, 53, 47, 43, 41, 37, 29, 23, 19,
17, 13, 7, 3
Número dado: 0, 0, 0, 0, 0, 0, 8, 0, 0,
1, 9, 7, 2, 6, 8
Pruducto: 0, 0, 0, 0, 0, 0,328, 0, 0,
23,171,119, 26, 42, 24

Debo modificar la forma como la función lee el "número dado", ya que
las posiciones de la izquierda deben ser llenadas con ceros.

El resultado correcto (con la segunda opcion) es cuatro (4), pero
actualmente me está dando cero (0) porque el "número dado" se
justifica a la izquierda y no a la derecha como es correcto.

Anticipo mis agradecimientos a todos y desde luego a "KL" si mira mi
inquietud.

Cordial saludo,

ElProfe

Preguntas similares