PHP Snippet

Validación de RUT en PHP con Algoritmo Módulo 11

Función optimizada en PHP 8.x para validar el formato y dígito verificador de RUTs en tiendas online WooCommerce, formularios de contacto y APIs en Laravel.

RutValidator.php
<?php

class RutValidator {
    /**
     * Valida un RUT chileno.
     * @param string $rut
     * @return bool
     */
    public static function validate(string $rut): bool {
        // Eliminar caracteres especiales
        $cleaned = strtoupper(preg_replace('/[^0-9kK]/', '', $rut));
        if (strlen($cleaned) < 2) {
            return false;
        }

        $body = substr($cleaned, 0, -1);
        $dv = substr($cleaned, -1);

        if (!ctype_digit($body)) {
            return false;
        }

        // Algoritmo Módulo 11
        $sum = 0;
        $multiplier = 2;

        for ($i = strlen($body) - 1; $i >= 0; $i--) {
            $sum += intval($body[$i]) * $multiplier;
            $multiplier = ($multiplier === 7) ? 2 : $multiplier + 1;
        }

        $remainder = $sum % 11;
        $expectedDv = 11 - $remainder;

        if ($expectedDv === 11) {
            $calculatedDv = '0';
        } elseif ($expectedDv === 10) {
            $calculatedDv = 'K';
        } else {
            $calculatedDv = (string)$expectedDv;
        }

        return $dv === $calculatedDv;
    }
}

// Ejemplo de uso:
var_dump(RutValidator::validate('10.000.013-K')); // bool(true)
var_dump(RutValidator::validate('12345678-5'));   // bool(true)
var_dump(RutValidator::validate('10.000.013-0')); // bool(false)
Publicidad
Espacio Publicitario AdSense (728x90)