ernestoch/rif-php

Librería PHP para validar, formatear y generar números RIF (Registro de Información Fiscal) de Venezuela

Installs: 1

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/ernestoch/rif-php

v1.0.0 2025-10-18 20:22 UTC

This package is auto-updated.

Last update: 2025-10-18 20:54:07 UTC


README

PHP Version Tests License

Una librería PHP profesional para validar, formatear y generar números RIF (Registro de Información Fiscal) de Venezuela.

✨ Características

  • Validación completa de números RIF según algoritmo oficial
  • Cálculo del dígito verificador con algoritmo verificados
  • Soporte para todos los tipos de RIF (V, E, J, P, G, C)
  • Formateo profesional para presentación
  • Generación de RIFs válidos para testing
  • 100% type-hinted y compatible con PHP 8.3+
  • Cobertura completa de tests
  • PSR-4 y estándares modernos de PHP

📦 Instalación

composer require ernestoch/rif-php

Probar instalación

php -r "require 'vendor/autoload.php'; echo ErnestoCh\Rif\Rif::isValid('V113502963') ? '✅ Instalación exitosa!' : '❌ Error';"

🚀 Uso Rápido

<?php

require_once 'vendor/autoload.php';

use ErnestoCh\Rif\Rif;

// Validación simple
if (Rif::isValid('V113502963')) {
    echo "RIF válido!";
}

// Validación con manejo de excepciones
try {
    $rif = Rif::create('J000029679');
    echo "RIF: " . $rif->getRaw();
    echo "Tipo: " . $rif->getType()->getDescription();
    echo "Número: " . $rif->getNumber();
    echo "Dígito verificador: " . $rif->getCheckDigit();
} catch (ErnestoCh\Rif\Exceptions\RifValidationException $e) {
    echo "Error: " . $e->getMessage();
}

// Validación de RIFs conocidos
$knownRifs = [
    'V113502963', // RIF personal
    'G200001100', // Banco Central de Venezuela
    'J000029679', // Banco Provincial
];

foreach ($knownRifs as $rifString) {
    if (Rif::isValid($rifString)) {
        echo "$rifString es válido\n";
    }
}

🎨 Formateadores

La librería incluye múltiples formateadores para diferentes contextos:

<?php

use ErnestoCh\Rif\Rif;
use ErnestoCh\Rif\Formatters\RifFormatter;

$rif = Rif::create('J000029679');

// Diferentes formatos disponibles
echo RifFormatter::standard($rif);        // J-00002967-9
echo RifFormatter::spaced($rif);          // J 00 002 967 9
echo RifFormatter::withDescription($rif); // J-00002967-9 (Persona Jurídica)
echo RifFormatter::dotted($rif);          // J-2.967-9
echo RifFormatter::legal($rif);           // R.I.F. J-00002967-9

// Método de conveniencia
echo $rif->format('standard');            // J-00002967-9
echo $rif->format('spaced');              // J 00 002 967 9

Casos de uso comunes:

Interfaces de usuario: spaced o dotted para mejor legibilidad

Bases de datos: compact o database para almacenamiento

Facturas electrónicas: invoice (formato SENIAT)

Documentos legales: legal para contratos y documentos formales

Mostrar información completa: withDescription para interfaces administrativas

🎲 Generador de RIFs Válidos

Genera RIFs válidos para testing y desarrollo:

<?php

use ErnestoCh\Rif\Rif;
use ErnestoCh\Rif\Types\RifType;

// Generar un RIF aleatorio
$rif = Rif::generate();
echo $rif->getRaw(); // Ej: V123456789

// Generar un tipo específico
$rif = Rif::generate(RifType::LEGAL);
echo $rif->getRaw(); // Ej: J987654321

// Generar múltiples RIFs
$rifs = Rif::generateMultiple(5);
foreach ($rifs as $rif) {
    echo $rif->format() . "\n";
}

// Generar RIF secuencial (útil para testing)
$rif = Rif::generateSequential(42, RifType::NATURAL);
echo $rif->getRaw(); // V00000042X

// Usar el generador directamente
use ErnestoCh\Rif\Services\RifGenerator;

$rif = RifGenerator::generateOneOfEachType();
foreach ($rif as $type => $rifInstance) {
    echo "{$type}: {$rifInstance->format()}\n";
}

Casos de uso del generador:

Testing: Generar datos de prueba para tus tests unitarios

Desarrollo: Rellenar bases de datos de desarrollo

Demostraciones: Crear ejemplos para documentación o presentaciones

Prototipos: Probar interfaces sin necesidad de RIFs reales

🔍 Validador de Formato

Valida la estructura de un RIF sin verificar el dígito verificador:

<?php

use ErnestoCh\Rif\Rif;
use ErnestoCh\Rif\Validators\FormatValidator;

// Validar estructura completa (pero sin dígito verificador)
if (Rif::isValidFormat('J123456789')) {
    echo "Formato válido";
}

// Validar usando el validador directamente
if (FormatValidator::validateStructure('V113502963')) {
    echo "Estructura válida";
}

// Validación parcial (prefijo y cuerpo)
if (FormatValidator::validatePartial('J123456789')) {
    echo "Prefijo y cuerpo válidos";
}

// Validar componentes individuales
if (FormatValidator::isValidPrefix('V')) {
    echo "Prefijo válido";
}

if (FormatValidator::isValidBody('12345678')) {
    echo "Cuerpo válido";
}

// Extraer el tipo de RIF
$type = FormatValidator::extractType('J123456789');
if ($type) {
    echo "Tipo: " . $type->getDescription();
}

// Obtener detalles de validación para feedback al usuario
$details = Rif::validateFormat('X12A');
if (!$details['is_valid']) {
    foreach ($details['errors'] as $error) {
        echo "Error: $error\n";
    }
    foreach ($details['suggestions'] as $suggestion) {
        echo "Sugerencia: $suggestion\n";
    }
}

Casos de uso del validador de formato:

Validación en tiempo real: En formularios, validar mientras el usuario escribe

Feedback inmediato: Indicar errores de formato sin esperar a la validación completa

Limpieza de datos: Verificar datos antes de procesarlos

Clasificación: Identificar el tipo de RIF antes de validar completamente

🧪 Ejecución de Tests

# Ejecutar tests
composer test

# Análisis estático de código
composer analyse

# Verificación de estándares de código
composer lint

📚 Documentación

Consulta la documentación completa para más ejemplos y API reference.

🤝 Contribuciones

Las contribuciones son bienvenidas. Por favor:

Fork el proyecto

Crea una rama para tu feature (git checkout -b feature/AmazingFeature)

Commit tus cambios (git commit -m 'Add some AmazingFeature')

Push a la rama (git push origin feature/AmazingFeature)

Abre un Pull Request

📄 Licencia

Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para detalles.

🏢 Uso en Producción

Esta librería está siendo utilizada en producción y ha sido verificada con RIFs reales del sistema venezolano.