[AYUDA] Script para generar seriales los crea repetidos

Iniciado por Graphixx, 16 Septiembre 2014, 17:53 PM

0 Miembros y 1 Visitante están viendo este tema.

Graphixx

Buenas, junte 3 ejemplos que encontre en la red de generar seriales en 1 solo codigo, la cosa es que si estoy cojiendo 3 datos diferentes, no entiendo por que el script me repite seriales.

Código (php) [Seleccionar]

<?php
function RandomString($length=10,$uc=TRUE,$n=TRUE,$sc=FALSE)
{
    
//$source = 'abcdefghijklmnopqrstuvwxyz';
    //if($uc==1) $source .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
if($uc==1$source .= 'abcdefghijklmnopqrstuvwxyz';
    if(
$n==1$source .= '1234567890';
    
//if($sc==1) $source .= '|@#~$%()=^*+[]{}-_';
    
if($length>0){
        
$rstr "";
        
$source str_split($source,1);
        for(
$i=1$i<=$length$i++){
            
mt_srand((double)microtime() * 1000000);
            
$num mt_rand(1,count($source));
            
$rstr .= $source[$num-1];
        }
 
    }
    return 
$rstr;
}

//echo "<font size=38>a".RandomString(6,TRUE,true,false)."</font>";

    
function generateKey($webroot,$shortname,$version){
     
    
$webroot strtolower(trim($webroot));
    for(
$i=0;$i<strlen($webroot);$i++){
    
$alpha substr($webroot,$i,$i+1);
    
$key1="";
    
$thisS=getValue($alpha);
    
$key1$key1 $thisS;
    }
     
    
$shortname strtolower(trim($shortname));
    for(
$i=0;$i<strlen($shortname);$i++){
    
$alpha substr($shortname,$i,1);
     
    
$key3="";
    
$key3$key3 $thisS;
    }
     
    
$version strtolower(trim($version));
    for(
$i=0;$i<strlen($version);$i++){
    
$alpha substr($version,$i,1);
    
$key4 ="";
    
$key4 =$key4+$thisS;
    }
     
    
$hkey1 = ($key1 $key3 $key4) * 9;
    
$hkey2 = ($key1 $key3 $key4) * 2;
    
$hkey3 = ($key1 $key3 $key4) * 3;
    
$hkey4 = ($key1 $key3 $key4) * 5;
    
$ckey1 substr(strtoupper(crypt($hkey1,$key1)),3,4);
    
$ckey1 str_replace(".","A",$ckey1);
    
$ckey1 str_replace("/","Z",$ckey1);
    
$ckey2 substr(strtoupper(crypt($hkey2,$key1)),3,4);
    
$ckey2 str_replace(".","G",$ckey2);
    
$ckey2 str_replace("/","3",$ckey2);
    
$ckey3 substr(strtoupper(crypt($hkey3,$key3)),3,4);
    
$ckey3 str_replace(".","6",$ckey3);
    
$ckey3 str_replace("/","D",$ckey3);
    
$ckey4 substr(strtoupper(crypt($hkey4,$key4)),3,4);
    
$ckey4 str_replace(".","K",$ckey4);
    
$ckey4 str_replace("/","W",$ckey4);
     
    return 
$ckey1."-".$ckey4;
    }
     
    function 
getValue($alpha){
    switch(
$alpha){
    case 
'a': return 6678 ; break;
    case 
'b': return 1712 ; break;
    case 
'c': return 5513 ; break;
    case 
'd': return 6648 ; break;
    case 
'e': return 7626 ; break;
    case 
'f': return 4581 ; break;
    case 
'g': return 7221 ; break;
    case 
'h': return 4891 ; break;
    case 
'i': return 4441 ; break;
    case 
'j': return 8503 ; break;
    case 
'k': return 7567 ; break;
    case 
'l': return 8028 ; break;
    case 
'm': return 2074 ; break;
    case 
'n': return 1770 ; break;
    case 
'o': return 2442 ; break;
    case 
'p': return 3321 ; break;
    case 
'q': return 3899 ; break;
    case 
'r': return 2474 ; break;
    case 
's': return 5313 ; break;
    case 
't': return 7505 ; break;
    case 
'u': return 9808 ; break;
    case 
'v': return 3571 ; break;
    case 
'w': return 3352 ; break;
    case 
'x': return 3410 ; break;
    case 
'y': return 7058 ; break;
    case 
'z': return 5847 ; break;
    case 
'0': return 15058 ; break;
    case 
'1': return 89739 ; break;
    case 
'2': return 27663 ; break;
    case 
'3': return 53044 ; break;
    case 
'4': return 74136 ; break;
    case 
'5': return 89338 ; break;
    case 
'6': return 17816 ; break;
    case 
'7': return 93186 ; break;
    case 
'8': return 84464 ; break;
    case 
'9': return 58450 ; break;
    default: return 
1419 ; break;
    }
 }
 
function 
encrypt($string$key) {
   
$result '';
   for(
$i=0$i<strlen($string); $i++) {
      
$char substr($string$i1);
      
$keychar substr($key, ($i strlen($key))-11);
      
$char chr(ord($char)+ord($keychar));
      
$result.=$char;
   }
   return 
base64_encode($result);
}


 
$link=mysql_connect("localhost","root","");
mysql_select_db("seriales",$link);
 
for (
$i 0$i 90$i++) {
    
$cod1 "a".RandomString(6,TRUE,true,false);
$webroot $cod1;
$shortname strrev($cod1);
    
$cadena_encriptada encrypt($cod1,$shortname);
$version $cadena_encriptada;
echo $cod1." / ".$version." / ".$shortname." <br/>";
    
$serial generateKey($webroot,$shortname,$version);

    
mysql_query("insert into seriales(qr,serial) values('$cod1','$serial')",$link);
}

mysql_close($link);
?>



Esta convinacion de 3 ejemplos fue lo mejor que encontre, si conocen de mas ejemplos de generar serial en php, se agradece...
Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog

MCKSys Argentina

Hola!

Desconozco la sintaxis de PHP, pero si se me ocurren algoritmos para generar seriales.

En realidad, es cuestion de jugar un poco con los datos y evitar colisiones de seriales para distintos valores de entrada (lo cual solucionas facil con hashes).

La pregunta es: en base a qué quieres generar los seriales? A parametros como los del ejemplo (webroot, shortname y version)?

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Graphixx

Cita de: MCKSys Argentina en 16 Septiembre 2014, 19:55 PM
La pregunta es: en base a qué quieres generar los seriales? A parametros como los del ejemplo (webroot, shortname y version)?
Saludos!

El ejemplo traia 3 llaves, yo solo necesito en base a 1 sola llave... me parece que con este ejemplo me voy a bastar:
http://www.phpclasses.org/package/6823-PHP-Generate-serial-numbers.html#screenshots

Yo lo adapte para generar seriales en base a un string random, os dejo mi codigo por aca:
http://www.4shared.com/zip/NQrYs3kPba/cod04.html
El ejemplo generaba 4 bloques de serial, yo modifique de la libreria "Serial.php" de la linea 87:
Cambie:
      while(++$blockCount < 4)
Por:
      while(++$blockCount < 2)
Asi que ya solo genera 2 bloques, vale.

De todas formas sigo abierto a que me recomienden mas librerias de generar seriales en PHP.
Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog