Skip to content

Instantly share code, notes, and snippets.

@lucenarenato
Last active July 16, 2024 18:40
Show Gist options
  • Save lucenarenato/2b9595ffdf86e47ca8809430ac234c6d to your computer and use it in GitHub Desktop.
Save lucenarenato/2b9595ffdf86e47ca8809430ac234c6d to your computer and use it in GitHub Desktop.

Gerar Codigo

No meu codigo legado feito em php puro, ao inserir o poduto na tabela bt_produtos, tem uma função "gerarcod" que gera um codigo aleatorio unico para coluna "pr_cod_produto"

gerarcod("bt_produtos","pr_cod_produto", 15);

function gerarcod($tabela,  $unico, $norma){
$pdo = conectar();
$grave = "sim";	
	   while($grave = "sim"){
			$dtbase=date('Y');	
			$letras  = array('A','T','U','I','H','P','W','R','T');
			$numeros = array(0,1,2,3,4,5,6,7,8,9);
			$total_let = count($letras)-1;
			$total_num = count($numeros)-1;
			$codigo = $letras[rand(0,$total_let)] . $numeros[rand(0,$total_num)] . $letras[rand(0,$total_let)] . $numeros[rand(0,$total_num)] . $letras[rand(0,$total_let)] . $numeros[rand(0,$total_num)];					
			$codigo = $dtbase.$codigo;		
					$validar = $pdo ->prepare("SELECT * FROM $tabela WHERE cod_plan=?");
					$validar -> execute(array($codigo));
					if($validar->rowCount() == 0):
									$codigo = "sucesso/$codigo";
									break;
					else:
								continue;
					endif;
          }
		   list($retorno, $primaria) = explode("/",$codigo);
		   if($retorno!="sucesso"){ $primaria = "falha"; }
		  return $primaria;
  }	

Modelo feito em Laravel

<?php

namespace App\Models\Office;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class CodeReference extends Model
{
  use HasFactory;

  protected $table = 'code_reference';

  protected $guarded = [];

  public $timestamps = false;

  /**
   * Retorna um novo código único para ser usado em N situações
   *
   * @return string
   */
  public static function newCode($prefix = ''): string
  {
      $lethers = [
          ['A','K','U'],
          ['B','L','V'],
          ['C','M','W'],
          ['D','N','X'],
          ['E','O','Y'],
          ['F','P','Z'],
          ['G','Q'],
          ['H','R'],
          ['I','S'],
          ['J','T'],
      ];
      $reference = self::create([]);
      $reference = strval($reference->id);
      $code = '';
      for($i = 0; $i < strlen($reference); $i++) {
          $code .= $lethers[intval($reference[$i])][array_rand($lethers[intval($reference[$i])])];
      }

      return $prefix.$code;
  }
}

Model

 public static function new(array $data, BonusStatus $typeStatus, BonusType $type, BonusLaunchType $launchType): Bonus
    {
        $code = CodeReference::newCode('BNF');
        return self::create([
            'cod_detalhe' => $code,
            'cod_conta' => $data['account'],
            ]);
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment