PHPackages                             laymont/laravel-fuzzy-match - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. laymont/laravel-fuzzy-match

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

laymont/laravel-fuzzy-match
===========================

Laravel package for fuzzy matching (string similarity) using Levenshtein, SimilarText, and Jaro-Winkler algorithms

v1.0.2(1mo ago)021↓50%MITPHPPHP ^8.2CI passing

Since May 7Pushed 1w agoCompare

[ Source](https://github.com/laymont/LaravelFuzzyNatch)[ Packagist](https://packagist.org/packages/laymont/laravel-fuzzy-match)[ RSS](/packages/laymont-laravel-fuzzy-match/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (4)Dependencies (4)Versions (5)Used By (0)

laymont/laravel-fuzzy-match
===========================

[](#laymontlaravel-fuzzy-match)

Laravel package for fuzzy matching (string similarity) using Levenshtein, SimilarText, and Jaro-Winkler algorithms.

Objetivo
--------

[](#objetivo)

Este paquete proporciona algoritmos de coincidencia aproximada de strings (fuzzy matching) para detectar nombres similares y evitar duplicados en entidades como consignatarios y otras entidades en sistemas de control de contenedores marítimos.

Características
---------------

[](#características)

- **Algoritmos implementados**:
    - Levenshtein (distancia de edición) - Prioridad Alta
    - SimilarText (porcentaje de similitud) - Prioridad Media
    - Jaro-Winkler (para nombres con transposiciones) - Prioridad Baja
- **Facade conveniente** para uso simple
- **Configuración flexible** para ajustar algoritmos y umbrales
- **Sin dependencias externas** (usa funciones nativas de PHP donde sea posible)
- **Compatible con Laravel 12+ y Laravel 13+**
- **PHP 8.2+ (Laravel 12) o PHP 8.3+ (Laravel 13)**

Instalación
-----------

[](#instalación)

```
composer require laymont/laravel-fuzzy-match
```

Configuración
-------------

[](#configuración)

Publica la configuración:

```
php artisan vendor:publish --provider="Laymont\FuzzyMatch\FuzzyMatchServiceProvider"
```

Esto creará `config/fuzzy-match.php` con las siguientes opciones:

```
return [
    // Algoritmo por defecto: 'levenshtein', 'similar_text', 'jaro_winkler'
    'default_algorithm' => env('FUZZY_MATCH_DEFAULT_ALGORITHM', 'levenshtein'),

    // Umbral para determinar similitud
    // - Para Levenshtein: distancia máxima (menor es mejor)
    // - Para algoritmos de similitud: puntuación mínima (mayor es mejor)
    'threshold' => env('FUZZY_MATCH_THRESHOLD', 3),

    // Si el matching debe ser case sensitive
    'case_sensitive' => env('FUZZY_MATCH_CASE_SENSITIVE', false),

    // Algoritmos habilitados
    'algorithms' => [
        'levenshtein' => true,
        'similar_text' => true,
        'jaro_winkler' => false,
    ],
];
```

Uso
---

[](#uso)

### Facade

[](#facade)

```
use Laymont\FuzzyMatch\Facades\FuzzyMatch;

// Buscar nombres similares
$similar = FuzzyMatch::findSimilar('MAERSK LINE', [
    'algorithm' => 'levenshtein',
    'threshold' => 3,
    'case_sensitive' => false,
]);

// Resultado esperado:
// [
//     ['id' => 0, 'name' => 'MAERSK LINE', 'distance' => 0],
//     ['id' => 1, 'name' => 'MAERSK LINES', 'distance' => 1],
// ]

// Calcular distancia específica
$distance = FuzzyMatch::calculateDistance('MAERSK LINE', 'MAERSK LINES', 'levenshtein');
// Resultado: 1
```

### Service

[](#service)

```
use Laymont\FuzzyMatch\Services\FuzzyMatchService;

$service = new FuzzyMatchService();
$results = $service->findSimilar('MAERSK LINE', [
    'algorithm' => 'levenshtein',
    'threshold' => 3,
]);
```

### Uso en Form Request (Ayaguna)

[](#uso-en-form-request-ayaguna)

```
use Laymont\FuzzyMatch\Facades\FuzzyMatch;
use Illuminate\Validation\Rule;

public function rules()
{
    $name = $this->input('name');

    $similar = FuzzyMatch::findSimilar($name, [
        'threshold' => 3,
    ]);

    return [
        'name' => [
            'required',
            'string',
            Rule::unique('consignees')->ignore($this->id),
            function ($attribute, $value, $fail) use ($similar) {
                if (!empty($similar)) {
                    $fail("Existe un consignatario similar: {$similar[0]['name']}");
                }
            },
        ],
    ];
}
```

Algoritmos
----------

[](#algoritmos)

### Levenshtein (Prioridad Alta)

[](#levenshtein-prioridad-alta)

- **Descripción:** Distancia de edición entre dos strings
- **PHP nativo:** `levenshtein()`
- **Mide:** Inserciones, eliminaciones, sustituciones
- **Uso:** Detección de errores tipográficos leves

### SimilarText (Prioridad Media)

[](#similartext-prioridad-media)

- **Descripción:** Porcentaje de similitud
- **PHP nativo:** `similar_text()`
- **Ventaja:** Más rápido pero menos preciso
- **Uso:** Detección rápida de similitudes

### Jaro-Winkler (Prioridad Baja)

[](#jaro-winkler-prioridad-baja)

- **Descripción:** Para nombres con transposiciones
- **Implementación:** Manual (no nativo en PHP)
- **Ventaja:** Más preciso para nombres
- **Uso:** Detección de nombres con letras intercambiadas

Compatibilidad
--------------

[](#compatibilidad)

- PHP: `^8.2`
- Laravel: `^12.0|^13.0`

**Nota:** Laravel 12 requiere PHP 8.2+, mientras que Laravel 13 requiere PHP 8.3+.

Testing
-------

[](#testing)

El paquete incluye tests unitarios para cada algoritmo y el servicio principal.

```
./vendor/bin/pest
```

Contribución
------------

[](#contribución)

1. Haz un fork del repositorio.
2. Crea una rama: `git checkout -b feature/nueva-funcionalidad`.
3. Realiza cambios y hace commit: `git commit -m "Agregando..."`.
4. Sube: `git push origin feature/nueva-funcionalidad`.
5. Abre un Pull Request.

Donaciones
----------

[](#donaciones)

Si encuentras útil este paquete y deseas apoyar su desarrollo y mantenimiento, puedes considerar hacer una donación.

### Zinli

[](#zinli)

- **ID de usuario:** 3-002-58546608-36
- **Recargar:**

### Visa Prepagada Zinli

[](#visa-prepagada-zinli)

- **Número:** 4850460061276928

### Binance Pay

[](#binance-pay)

- **Binance Pay ID:** 206414132

¡Gracias por tu apoyo!

Licencia
--------

[](#licencia)

MIT.

###  Health Score

42

—

FairBetter than 88% of packages

Maintenance96

Actively maintained with recent releases

Popularity9

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity49

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

3

Last Release

33d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/13275422?v=4)[Laymont Arratia](/maintainers/laymont)[@laymont](https://github.com/laymont)

---

Top Contributors

[![laymont](https://avatars.githubusercontent.com/u/13275422?v=4)](https://github.com/laymont "laymont (5 commits)")

---

Tags

laravelMatchsimilarityjaro winklerlevenshteinfuzzy

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/laymont-laravel-fuzzy-match/health.svg)

```
[![Health](https://phpackages.com/badges/laymont-laravel-fuzzy-match/health.svg)](https://phpackages.com/packages/laymont-laravel-fuzzy-match)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3325.1M337](/packages/psalm-plugin-laravel)[renatomarinho/laravel-page-speed

Laravel Page Speed

2.5k1.7M11](/packages/renatomarinho-laravel-page-speed)[vinkius-labs/laravel-page-speed

Laravel Page Speed

2.5k9.6k1](/packages/vinkius-labs-laravel-page-speed)[edgaras/strsim

Collection of string similarity and distance algorithms in PHP including Levenshtein, Damerau-Levenshtein, Jaro-Winkler, and more

2843.7k4](/packages/edgaras-strsim)[emargareten/inertia-modal

Inertia Modal is a Laravel package that lets you implement backend-driven modal dialogs for Inertia apps.

90128.1k](/packages/emargareten-inertia-modal)[linkxtr/laravel-qrcode

A clean, modern, and easy-to-use QR code generator for Laravel

3614.9k](/packages/linkxtr-laravel-qrcode)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
