Comprobantes SRI Guía técnica 6 min de lectura

La clave de acceso del SRI

cómo se forma y cómo calcular su dígito verificador

Cada comprobante electrónico lleva una clave de 49 dígitos que lo identifica de forma única. No es un número cualquiera: cada grupo de dígitos significa algo, y el último se calcula con una fórmula. Si construyes comprobantes, tienes que saber armarla. Aquí cómo, con código.

CLAVE DE ACCESO · 49 DÍGITOS Módulo 11

  • 02112026 Fecha de emisión 8
  • 01 Tipo de comprobante 2
  • 1790000000001 RUC del emisor 13
  • 1 Ambiente 1
  • 001001 Serie 6
  • 000000123 Secuencial 9
  • 12345678 Código numérico 8
  • 1 Tipo de emisión 1
  • 9 Dígito verificador 1
01 — ESTRUCTURA

La estructura: 49 dígitos en 10 campos

#CAMPOLONGITUDEJEMPLO
1Fecha de emisión (ddmmaaaa)8 02112026
2Tipo de comprobante2 01
3RUC del emisor13 1790000000001
4Ambiente1 1
5Establecimiento3 001
6Punto de emisión3 001
7Secuencial9 000000123
8Código numérico8 12345678
9Tipo de emisión1 1
10Dígito verificador1 9

Los primeros 48 dígitos son los campos 1 al 9. El dígito 49 es el verificador.

Códigos que debes conocer

CAMPOVALORES
Tipo de comprobante01 factura · 03 liquidación de compra · 04 nota de crédito · 05 nota de débito · 06 guía de remisión · 07 comprobante de retención
Ambiente1 pruebas · 2 producción
Tipo de emisión1 emisión normal
02 — MÓDULO 11

El dígito verificador: módulo 11

Sirve para detectar errores de digitación o de construcción. El cálculo es:

  1. Toma los 48 primeros dígitos Son los campos 1 al 9 de la clave.
  2. Multiplica de derecha a izquierda Cada dígito por un factor que va de 2 a 7 y vuelve a empezar: 2, 3, 4, 5, 6, 7, 2, 3, 4…
  3. Suma todos los productos Obtienes un solo número.
  4. Calcula 11 − (suma mod 11) Ese es el candidato a dígito verificador.
  5. Ajusta los casos especiales Si el resultado es 11, el dígito es 0. Si es 10, el dígito es 1. En cualquier otro caso, es el resultado.
03 — CÓDIGO

En código

jsclaveAcceso.js
// Dígito verificador (módulo 11) de la clave de acceso del SRI
export function digitoVerificador(cuarentaYOcho) {
  const factores = [2, 3, 4, 5, 6, 7];
  let suma = 0;
  let i = 0;

  // De derecha a izquierda, con los factores 2, 3, 4, 5, 6, 7, 2, 3...
  for (let pos = cuarentaYOcho.length - 1; pos >= 0; pos--) {
    suma += Number(cuarentaYOcho[pos]) * factores[i % factores.length];
    i++;
  }

  const resultado = 11 - (suma % 11);
  if (resultado === 11) return 0;
  if (resultado === 10) return 1;
  return resultado;
}

export function claveAcceso({ fecha, tipo, ruc, ambiente, serie, secuencial, codigo, tipoEmision = "1" }) {
  const base = `${fecha}${tipo}${ruc}${ambiente}${serie}${secuencial}${codigo}${tipoEmision}`;
  if (!/^\d{48}$/.test(base)) {
    throw new Error("La base de la clave debe tener exactamente 48 dígitos");
  }
  return base + digitoVerificador(base);
}

// Ejemplo
console.log(
  claveAcceso({
    fecha: "02112026",      // ddmmaaaa
    tipo: "01",             // 01 = factura
    ruc: "1790000000001",
    ambiente: "1",          // 1 = pruebas, 2 = producción
    serie: "001001",        // establecimiento + punto de emisión
    secuencial: "000000123",
    codigo: "12345678",     // código numérico de 8 dígitos
  })
);
pythonclave_acceso.py
def digito_verificador(cuarenta_y_ocho: str) -> int:
    """Módulo 11 del SRI: factores 2..7 de derecha a izquierda."""
    factores = [2, 3, 4, 5, 6, 7]
    suma = sum(
        int(d) * factores[i % len(factores)]
        for i, d in enumerate(reversed(cuarenta_y_ocho))
    )
    resultado = 11 - (suma % 11)
    if resultado == 11:
        return 0
    if resultado == 10:
        return 1
    return resultado


base = "02112026" "01" "1790000000001" "1" "001001" "000000123" "12345678" "1"
assert len(base) == 48
print(base + str(digito_verificador(base)))

Con los datos del ejemplo, ambos programas producen la misma clave de 49 dígitos:

textresultado
0211202601179000000000110010010000001231234567819
04 — EVÍTALOS

Errores frecuentes al armar la clave

ERRORQUÉ PROVOCA
Fecha en otro formato (aaaa-mm-dd, o sin ceros)Clave con longitud o contenido incorrecto
Secuencial sin rellenar con ceros a 9 dígitosClave de menos de 49 dígitos
Mezclar establecimiento y punto de emisiónLa serie debe ser de 6 dígitos: 3 + 3
Código de ambiente que no coincide con el endpointRechazo por ambiente
Cambiar la clave en un reintentoGenera un comprobante nuevo en vez de reenviar el mismo
Dígito verificador mal calculadoRechazo por estructura de la clave
05 — POR API

¿Tengo que calcularla yo?

Si usas una API de facturación, no: la API arma la clave de acceso y te la devuelve en la respuesta. Guárdala en tu sistema: es la llave para consultar el XML y el estado de cualquier comprobante.

Conclusión

La clave de acceso es un identificador con significado: fecha, tipo, emisor, ambiente, numeración y un dígito de control. Si la armas tú, calcula el verificador con módulo 11 y nunca la cambies en un reintento.

FUENTES Y QUÉ REVISAR

  • Ficha técnica de comprobantes electrónicos del SRI (estructura de la clave de acceso y cálculo del módulo 11), versión vigente.
SIGUE LEYENDO

Del comprobante a la autorización

Ver todos los artículos
Empieza hoy

Solicita tu API key de pruebas

Prueba la API en el ambiente de pruebas del SRI y pasa a producción cuando estés listo.