Gerador de código do tipo: AA0001A01

Pessoal eu fiz um código para gerar códigos: de AA0001A01 até ZZ9999Z99

Vou disponibilizar aqui para qualquer que decidir utilizar. Talvez até dê para melhorar o código, mas este funciona direitinho.

$check_sql = "SELECT CHA001_ID"
   . " FROM cha001 ORDER BY CHA001_ID DESC LIMIT 1";
sc_lookup(rs, $check_sql);

if (isset({rs[0][0]}))
{
	$cha = {rs[0][0]};
	// Array de Letras
	$alfa = array("A", "B", "C", "D", "E",
				  "F", "G", "H", "I", "J",
				  "K", "L", "M", "N", "O",
				  "P", "Q", "R", "S", "T",
				  "U", "V", "W", "X", "Y","Z"
				  );

	// Variável de teste, descomente para testar o código.
	//$cha = "BZ9999Z99"; 
	
	// Tamanho array de letras
	$count = count($alfa);

	// Validações Final do código
	$final = $cha[7].$cha[8];
	$final = (int) $final;
	$final = $final + 1;
	if ($final < 10) {
		$final = 0 . $final;
	}
	else if($final == 100) {
		$final = "00";
	}
	
	// Validações Meio do código
	$meio = $cha[2].$cha[3].$cha[4].$cha[5];
	$meio = (int) $meio;
	if ($meio < 10) {
		$meio = "000".$meio;
	}	
	elseif ($meio < 100) {
		$meio = "00".$meio;
	}
	elseif ($meio < 1000) {
		$meio = "0".$meio;
	}
	
	// Verifica Letra 3
	for ($i=0; $i<$count; $i++) {
		if ($alfa[$i] == $cha[6]) {
			$alfa3 = $alfa[$i];
			$alfa2 = $cha[1];
			$alfa1 = $cha[0];
			if ($final == "00" && $i < 25) {
				$alfa3 = $alfa[$i+1];
			}
			else if ($i == 25 && $final == "00") {
				$alfa3 = $alfa[0];
				$meio = $meio+1;
				if ($meio < 10) {
					$meio = "000".$meio;
				}
				elseif ($meio < 100) {
					$meio = "00".$meio;
				}
				elseif ($meio < 1000) {
					$meio = "0".$meio;
				}
			}
			if ($i == 25 && $final == "00" && $meio == 10000) {
				$meio = "0001";
				// Verifica Letra 2
				for ($j=0; $j<$count; $j++) {
					if ($alfa[$j] == $cha[1]) {
						if ($j == 25) {
							$alfa2 = $alfa[0];
							// Verifica Letra 1
							for ($k=0; $k<$count; $k++) {
								if ($alfa[$k] == $cha[0]) {
									$alfa1 = $alfa[$k+1];
								}
							}
						}
						else {
							$alfa2 = $alfa[$j+1];
						}
					}
				}
			}
		}
	}
	
	// Código pronto
	$chamaCode = $alfa1.$alfa2.$meio.$alfa3.$final;
	sc_set_global($chamaCode);
	// Visualização de teste, descomente para visualizar o teste.
	// echo $chamaCode;
}
else
{
	$chamaCode = "AA0001A01";
	sc_set_global($chamaCode);
}

Abração galera.

Robert Berbert

Irmão, não sei bem o pq vc escolheu criar um codigo assim mas tá legal…

eu fiz uma com 4 linhas…

esse cria um hash da datatime com 10 digitos… a quantidade de digitos vc escolhe… o certo é que nunca vc conseguirá repetir o codigo…

function SetNumeroAp($id_ap) // aqui eu recebo o ID da tabela que quero um código
{
$numero_ap = strtoupper(substr(md5(time()),0,10)); // gero o código com 10 digitos
sc_exec_sql(“UPDATE autoriza_pagamento SET numero_ap = ‘$numero_ap’ WHERE id_ap = $id_ap”);// mando ele para minha tabela

Prontinho… Mais uma modelo

Flow

aiuehuaehui, Eu escolhi não foi meu cliente que escolheu. Você acha que me daria ao trabalho de fazer isso se não fosse obrigado. xD

Eu imaginei.

Agora esse meu hash quando criado para varios registros em apenas 1( um) click
Seria interessante usar um sleep(1); no for ou wile, para dar um time de 1 segundo a cada
Codigo.