Caso for utilizar a versão 2.00 da SEFAZ (será obrigatorio a partir de 01/10) use algo como :
<?
$cv = criaChave2('35','1005','52345732000012','1','234','1');
echo $cv;
//Código da UF AAMM da emissão CNPJ do Emitente Modelo Série Número da NF-e forma de emissao Código Numérico DV
//02 04 14 02 03 09 01 08 01
/* tpEmis pode ser
1 – Normal – emissão normal;
2 – Contingência FS – emissão em contingência com impressão do DANFE em Formulário de Segurança;
3 – Contingência SCAN – emissão em contingência no Sistema de Contingência do Ambiente Nacional – SCAN;
4 – Contingência DPEC - emissão em contingência com envio da Declaração Prévia de Emissão em Contingência – DPEC;
5 – Contingência FS-DA - emissão em contingência com impressão do DANFE em Formulário de Segurança para Impressão de Documento Auxiliar de Documento Fiscal Eletrônico (FS-DA).
*/
function criaChave2($cUF,$aamm,$cnpj,$serie,$numero,$tpEmis){
$rNum = '';
for( $x=0;$x<8;$x++ ){
$rNum .= rand(0,9);
}
$modelo = '55';
$serie = str_pad($serie, 3, "0", STR_PAD_LEFT);
$numero = str_pad($numero, 9, "0", STR_PAD_LEFT);
$chave = $cUF . $aamm . $cnpj . $modelo . $serie . $numero . $tpEmis . $rNum;
// 2 + 4 + 14 +2 + 3 + 9 + 9 = 43
$chave = $chave . calcDV($chave);
return $chave;
}
function calcDV($chave){
$n = strlen($chave);
// 4 4 4 4 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
// 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1
$aPeso = array(4,3,2,9,8,7,6,5,4,3,2,9,8,7,6,5,4,3,2,9,8,7,6,5,4,3,2,9,8,7,6,5,4,3,2,9,8,7,6,5,4,3,2);
if ($n != 43){
echo "Erro na chave";
return '';
}
$aChave = str_split($chave);
$soma = 0;
for($x=$n;$x>0;$x--){
$soma += $aPeso[$x] * $aChave[$x];
}
$resto = $soma%11;
if ($resto == 0 || $resto == 1){
$dv = 0;
} else {
$dv = 11-$resto;
}
return $dv;
}
?>