Foros del Web » Programando para Internet » PHP »

crear codigo digitos y letras

Estas en el tema de crear codigo digitos y letras en el foro de PHP en Foros del Web. hola amigos, estoy buscando gerar codigos de la siguiente manera que contengan 15 caracteres entre letras y numeros, y que no se repita ya que ...
  #1 (permalink)  
Antiguo 07/06/2014, 16:04
 
Fecha de Ingreso: septiembre-2013
Mensajes: 32
Antigüedad: 11 años, 2 meses
Puntos: 0
crear codigo digitos y letras

hola amigos, estoy buscando gerar codigos de la siguiente manera
que contengan 15 caracteres entre letras y numeros, y que no se repita ya que identificara articulos en una BD.

ejemplo: 1A2B-XDFR-0934-Q3R46

algo asi en php no se como lograr esto, tambien quiero validarlo en php, al momento del ingresarlo en el formualrio

si alguien sabe y me da un ejemplo por favor
  #2 (permalink)  
Antiguo 07/06/2014, 16:21
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: crear codigo digitos y letras

Primer intento:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $id_table= 54;
  4. echo implode(str_split(hash_hmac('ripemd160', strval($id_table), 'shh33j53-italico76'),4),'-');

Quizas es demasiado costoso en generar porque es un HASH... se puede hacer al azar tambien manipulando strings
__________________
Salu2!
  #3 (permalink)  
Antiguo 08/06/2014, 11:52
 
Fecha de Ingreso: septiembre-2013
Mensajes: 32
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: crear codigo digitos y letras

Cita:
Iniciado por Italico76 Ver Mensaje
Primer intento:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $id_table= 54;
  4. echo implode(str_split(hash_hmac('ripemd160', strval($id_table), 'shh33j53-italico76'),4),'-');

Quizas es demasiado costoso en generar porque es un HASH... se puede hacer al azar tambien manipulando strings
Gracias por responder amigo, pero no es lo que queria, ya que no genera diferentes toca cambiar el $id_table para que de otro diferente, y da un codigo de 40 digitos y el maximo que busco es 15, si tienes alguna otra idea
  #4 (permalink)  
Antiguo 08/06/2014, 12:50
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: crear codigo digitos y letras

Una solución que elaboré de primera mano y que creo puede mejorarse:

Código PHP:
Ver original
  1. function fn(){
  2.     $num = implode('', range(0, 9));
  3.     $let = implode('', range('A', 'Z'));
  4.     $comb = str_shuffle($num . $let);
  5.     $a = substr($comb, 0, 4);
  6.     $b = substr($comb, 4, 4);
  7.     $c = substr($comb, 7, 4);
  8.     $d = substr($comb, 11, 5);
  9.     return $a . '-' . $b . '-' . $c . '-' . $d;
  10. }
  11.  
  12. echo fn();

Esta función, crea dos arrays; uno compuesto por números del 0 al 9 y el otro compuesto por las letras del abecedario. Uno a los elementos de ambos arrays, convirtiéndolos así en cadenas, concateno a las cadenas resultantes y las desordeno. Finalmente, tomo cuatro porciones de la cadena final, las concateno con guiones y devuelvo el resultado que imprimiré en pantalla.

Para evitar guardar en la BD un código que posiblemente ya exista, deberás realizar la verificación respectiva; si existe, vuelves a generar la cadena hasta que se genere una que no esté almacenada en la BD. Creo que este proceso puede ser más eficiente, de modo que si alguien desea mejorarlo, es libre de hacerlo.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 08/06/2014, 13:44
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: crear codigo digitos y letras

Basado en el ejemplo anterior que hice pero esta vez totalmente al azar:

Ejemplo: 12B-XFR-034-Q34

Código PHP:
Ver original
  1. echo implode(str_split(substr(str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'),0,12),4),'-');

ó

Ejemplo: 1A2B-XDFR-0934-Q3R46

Código PHP:
Ver original
  1. echo implode(str_split(substr(str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'),0,16),4),'-');

Simplemente es cambiar el hash por otro tipo de funcion como str_shuffle() que te mencionaba mas arriba


PERSONALIZABLE:

Simplemente eliges cuantos segmentos y de que longitud cada uno para hacer por ejemplo algo como X6A7-P1ZV-MTHW

Código PHP:
<?php

$segmentos 
3;
$long_segm 4;

echo 
implode(str_split(substr(str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'),0,$segmentos*$long_segm),$long_segm),'-');
__________________
Salu2!

Última edición por Italico76; 08/06/2014 a las 13:58
  #6 (permalink)  
Antiguo 08/06/2014, 15:12
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: crear codigo digitos y letras

La forma que propones es buena, pero recuerda que nuestro amigo efren315 quiere que la última parte tenga 5 números/caracteres, mientras que las tres anteriores, solo tendrán 4 cada una. Recuerda también que las soluciones que demos, deben de ser legibles hasta por novatos, ten en cuenta que no todos, en especial los programadores nóveles que vienen al foro a buscar soluciones a sus problemas, van a entender un código compacto.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #7 (permalink)  
Antiguo 08/06/2014, 15:28
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: crear codigo digitos y letras

Cierto... pues que le contacatene cualquier letra o numero al final y ya

Aca parcheado, ahora ultimo segmento tiene un carcater extra:


Por cierto....... tienes toda la razon... sobre los codigos compactos, solo que en este foro hay cierta ilusion en cuanto a soluciones compactas son las mejores,
__________________
Salu2!

Última edición por Italico76; 27/05/2016 a las 09:36

Etiquetas: digitos, letras
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 18:01.