<?php

function validarChaveNFe($chave)
{
    // Verificar o tamanho da chave
    if (strlen($chave) !== 44) {
        return false;
    }
    
    // Verificar se a chave contém apenas números
    if (!ctype_digit($chave)) {
        return false;
    }
    
    // Verificar o dígito verificador da chave
    $chaveSemDV = substr($chave, 0, 43);
    $dvCalculado = calcularDV($chaveSemDV);
    $dvInformado = substr($chave, -1);
    
    if ($dvCalculado !== $dvInformado) {
        return false;
    }
    
    return true;
}

function calcularDV($chaveSemDV)
{
    $pesos = array(2, 3, 4, 5, 6, 7, 8, 9);
    $soma = 0;
    
    for ($i = 0; $i < 43; $i++) {
        $soma += $chaveSemDV[$i] * $pesos[$i % 8];
    }
    
    $resto = $soma % 11;
    $dv = ($resto == 0 || $resto == 1) ? 0 : (11 - $resto);
    
    return $dv;
}
