Foros del Web » Programando para Internet » PHP »

unico id

Estas en el tema de unico id en el foro de PHP en Foros del Web. Buenas amigos tengo un problemilla el caso es que necesito convertir un string en numero enteros que no se repitan con un maximo de 10 ...
  #1 (permalink)  
Antiguo 25/08/2012, 05:50
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 16 años, 5 meses
Puntos: 51
unico id

Buenas amigos tengo un problemilla el caso es que necesito convertir un string en numero enteros que no se repitan con un maximo de 10 cifras tengo esta funcion

Código PHP:
function reference_encode($name){
        
$l =strlen($name);
        
$c str_split($name);
        
$code=0;
        
$con='';
        foreach(
$c as $a){
            if(
is_int($a)){
                
$ch =  (int)$a;
            }else
            
$ch =  (int)ord($a);
            echo 
$ch.'-';
            
$code+=$ch;
            
$con.=$ch;
        }
        return 
$l.$code.strlen($con);
    }
reference_encode('M.1020-S2');    
echo 
'<br>';
reference_encode('M.1021-R2'); 
el caso es que si sumo carácter por carácter a veces el resultado se repite como en ejemplo anterior

A ver si alguno podría echarme una manita
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft
  #2 (permalink)  
Antiguo 25/08/2012, 13:02
 
Fecha de Ingreso: mayo-2006
Mensajes: 475
Antigüedad: 17 años, 11 meses
Puntos: 58
Respuesta: unico id

Se me ocurre que podrías multiplicar cada ascii por la posicion que ocupa en la cadena. o similar.
  #3 (permalink)  
Antiguo 26/08/2012, 16:51
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 16 años, 5 meses
Puntos: 51
Respuesta: unico id

gracias por la respuesta lo intentado multiplicando dividiendo y nada XD
esta es la que mejor me va pero en 25000 consultas hay algunas que coinciden XC
Código PHP:
public static function barcode_gen_ean_sum($ean){
      
$even=true$esum=0$osum=0;
      for (
$i=strlen($ean)-1;$i>=0;$i--){
        if (
$even$esum+=$ean[$i];    else $osum+=$ean[$i];
        
$even=!$even;
      }
      return (
10-((3*$esum+$osum)%10))%10;
    }
    public static function 
reference_encode($name){
        
$l strlen($name);
        
$b str_split(preg_replace('/[^A-Z a-z ._ ]/'""$name));
        
$num preg_replace('/[^0-9]/'""$name);
        
$ncon =0;
        for(
$i=0$i<count($b); $i++){
            
$ch =(int)ord($b[$i]);
            
$ncon+=$ch*$i;
        }
        
$st self::barcode_gen_ean_sum($num)+self::barcode_gen_ean_sum($ncon);
        
$ncon +=$num;
        
$ncon +=$num;
        
$ncon .=$st;
        
$ncon .=$l;
        return 
round($ncon);
    } 
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft

Etiquetas: unicos
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




La zona horaria es GMT -6. Ahora son las 04:05.