Foros del Web » Programando para Internet » PHP »

Ayuda para implementar una funcion de este algoritmo (estilo firma electronica)

Estas en el tema de Ayuda para implementar una funcion de este algoritmo (estilo firma electronica) en el foro de PHP en Foros del Web. Necesito crear una función en PHP para hacer una especie de firma electrónica. Tengo una cadena de numeros compuesta por fecha y un numero consecutivo, ...
  #1 (permalink)  
Antiguo 10/06/2007, 21:43
Avatar de webbeginner  
Fecha de Ingreso: noviembre-2004
Mensajes: 241
Antigüedad: 20 años
Puntos: 2
Exclamación Ayuda para implementar una funcion de este algoritmo (estilo firma electronica)

Necesito crear una función en PHP para hacer una especie de firma electrónica.

Tengo una cadena de numeros compuesta por fecha y un numero consecutivo, a esta cadena necesito agregarle un digito verificador (el meollo del asunto).

El algoritmo ya lo tengo y va de la siguiente forma (ver imagen)


1.- Primero obtengo mi cadena de caracteres (fecha, numero consecutivo)

2.- Le aplico una llave (ejemplo 1,3,1,3,1,3,1,3)

Estos digitos se utilizaran para multiplicar cada uno de los numeros de mi cadena

(ver imagen)
El 2 se multiplica por el 1
El 0 se multiplica por el 3
El 0 se multiplica por el 1
El 7 se multiplica por el 3
El 1 se multiplica por el 1
El 2 se multiplica por el 3
El 0 se multiplica por el 1
.
.
.

y Así sucesivamente ..

El producto de cada numero, debe ser sumado (en el ejemplo de la imagen nos da un total de 53)

3.- Se debe aplicar la siguiente regla.

Si el numero es cerrado (es decir 20, 30, 40, 50) el digito verificador será el 0,

Si el numero es cualquier otro numero, se debera seleccionar un numero de la decena proxima para hacer una resta y así obtener el numero verificador, (por ejemplo si el numero es el 78 se selecionara el 80, si el numero es 53 como el de la imagen el numero a seleccionar será 60.

De tal manera que si seguimos el ejemplo de la imagen tendriamos que hacer la resta de 60 - 53 y tendriamos un resultado de 7,

siendo 7 el anhelado digito verificador.


y la clave final quedaria completa como la que se muestra en la imagen,

Por favor pido de su valiosa ayuda, la verdad no se ni como comenzar, necesito algunas ideas, de ustedes que son los expertos.

Se los agradeceré mucho como siempre.

Saludos
__________________
************************
"La bondad es simple; la maldad, múltiple"
  #2 (permalink)  
Antiguo 10/06/2007, 23:55
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 19 años, 2 meses
Puntos: 49
Re: Ayuda para implementar una funcion de este algoritmo (estilo firma electronica)

preguntas sabes php?
la cadena es fija o variable?

si la cadena es fija es muy facil si la cadena es variable hay que fabricar una funcion especial :)
nos dices como va la cadena y le damos al code...
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #3 (permalink)  
Antiguo 11/06/2007, 09:16
Avatar de webbeginner  
Fecha de Ingreso: noviembre-2004
Mensajes: 241
Antigüedad: 20 años
Puntos: 2
Re: Ayuda para implementar una funcion de este algoritmo (estilo firma electronica)

Hola Kaninox, gracias por responder

Cita:
preguntas sabes php?
SI se php, he hecho varias cosas pero la verdad sencillas, ahora se me presento esta problema pero no se ni como atacarlo

Cita:
la cadena es fija o variable?
La cadena es variable, la voy armando en cada registro de una tabla de una base de datos, pero si me dan una mano para hacerlo aunque sea fija, veré la forma de adaptarlo con información dinamica,

es mas podemos partir de que yo ya tengo una variable que trae la cadena que necesito manipular
Código PHP:

<?php $micadena $_GET['cadena']; ?>
QUe me sugieren?
__________________
************************
"La bondad es simple; la maldad, múltiple"
  #4 (permalink)  
Antiguo 11/06/2007, 09:50
Avatar de Yranac  
Fecha de Ingreso: junio-2007
Mensajes: 125
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: Ayuda para implementar una funcion de este algoritmo (estilo firma electronica)

Si entendí bien el problema, la solución sería algo como esto
Código PHP:
<?php
    
function firma($cadena$llave){
        for(
$i 0$i strlen($cadena); $i++){
            
$sum += $cadena[$i] * $llave[$i];
        }
        
$rest $sum 10;
        if(
$rest == 0){
            
$valor 0;
        }else{
            
$valor 10 $rest;
        }
        return 
$valor;
    }
y una prueba
Código PHP:
    $cadena '2007120126';
    
$llave =  '1313131313';
    echo 
firma($cadena$llave);    
?> 
Espero te sirva
  #5 (permalink)  
Antiguo 12/06/2007, 09:50
Avatar de webbeginner  
Fecha de Ingreso: noviembre-2004
Mensajes: 241
Antigüedad: 20 años
Puntos: 2
Re: Ayuda para implementar una funcion de este algoritmo (estilo firma electronica)

Gracias Yranac !

Funciona excelentemente bien

Saludos !!!
__________________
************************
"La bondad es simple; la maldad, múltiple"
  #6 (permalink)  
Antiguo 12/06/2007, 10:46
Avatar de Yranac  
Fecha de Ingreso: junio-2007
Mensajes: 125
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: Ayuda para implementar una funcion de este algoritmo (estilo firma electronica)

Un placer, para ayudar estamos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 21:57.