PHPackages                             mostafaaminflakes/dual-optimus - 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. mostafaaminflakes/dual-optimus

ActiveLibrary

mostafaaminflakes/dual-optimus
==============================

Dual Optimus - ID obfuscation with 64-bit support while maintaining 32-bit compatibility

1.0.2(9mo ago)02MITPHPPHP ^8.1CI passing

Since Aug 7Pushed 9mo agoCompare

[ Source](https://github.com/mostafaaminflakes/dual-optimus)[ Packagist](https://packagist.org/packages/mostafaaminflakes/dual-optimus)[ Docs](https://github.com/mostafaaminflakes/dual-optimus)[ RSS](/packages/mostafaaminflakes-dual-optimus/feed)WikiDiscussions main Synced 1mo ago

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

Dual Optimus
============

[](#dual-optimus)

[![Latest Version on Packagist](https://camo.githubusercontent.com/87b871fb858b01eec6c94dc114d23769bd64370b61593cc5b10134bdbdddf846/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6d6f7374616661616d696e666c616b65732f6475616c2d6f7074696d75732e737667)](https://packagist.org/packages/mostafaaminflakes/dual-optimus)[![PHP Version Require](https://camo.githubusercontent.com/d44e37b503f16d4b8f12cb8fa6cf762205febb8b3fec291604508b9a0389d793/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f6d6f7374616661616d696e666c616b65732f6475616c2d6f7074696d7573)](https://packagist.org/packages/mostafaaminflakes/dual-optimus)[![License](https://camo.githubusercontent.com/78c1eb07d08036cf2a06a965fca6cbed0fd97d9daa8e8eeb59129a4ff3a770fd/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6d6f7374616661616d696e666c616b65732f6475616c2d6f7074696d75732e7376673f7374796c65)](https://packagist.org/packages/mostafaaminflakes/dual-optimus)[![GitHub Tests Action Status](https://camo.githubusercontent.com/79c61bfdf5c9dc9606a16c17e5d0ce91979ddb9d91a1563382b85f9d3a1515db/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6d6f7374616661616d696e666c616b65732f6475616c2d6f7074696d75732f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473)](https://github.com/mostafaaminflakes/dual-optimus/actions?query=workflow%3Arun-tests+branch%3Amain)[![GitHub Code Style Action Status](https://camo.githubusercontent.com/19110cc1b86b69ba774554259a9d2677c5435d019d0eff70ccc5ca0eac820fbb/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6d6f7374616661616d696e666c616b65732f6475616c2d6f7074696d75732f6669782d7068702d636f64652d7374796c652d6973737565732e796d6c3f6272616e63683d6d61696e266c6162656c3d636f64652532307374796c65)](https://github.com/mostafaaminflakes/dual-optimus/actions?query=workflow%3A%22Fix+PHP+code+style+issues%22+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/c75c55c2cfa58d9f6b0dbc2d5f9bd989c6603779395621907e1e4b75d7e03627/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6d6f7374616661616d696e666c616b65732f6475616c2d6f7074696d75732e737667)](https://packagist.org/packages/mostafaaminflakes/dual-optimus/stats)[![codecov](https://camo.githubusercontent.com/674c72365e9884f06ebf4bba080a1da24a846a28e98c09864b7f81bea78bccfa/68747470733a2f2f636f6465636f762e696f2f67682f6d6f7374616661616d696e666c616b65732f6475616c2d6f7074696d75732f6272616e63682f6d61696e2f67726170682f62616467652e737667)](https://codecov.io/gh/mostafaaminflakes/dual-optimus)

A powerful PHP package that extends [Jenssegers\\Optimus](https://github.com/jenssegers/optimus) to support both 64-bit and 32-bit ID obfuscation with intelligent auto-detection, multiple connections, and seamless Laravel integration.

✨ Features
----------

[](#-features)

- **🔧 Built on Jenssegers\\Optimus**: Leverages the proven and battle-tested 32-bit implementation
- **🚀 Dual Bit Support**: Seamlessly handles both 32-bit and 64-bit integers with automatic detection
- **🔄 100% Backward Compatible**: Drop-in replacement for existing Jenssegers\\Optimus implementations
- **🔗 Multiple Connections**: Configure and use multiple Optimus instances for different use cases
- **🧠 Intelligent Auto-Detection**: Automatically selects the appropriate bit size based on input value
- **🎯 Laravel Ready**: Complete Laravel integration with service provider, facade, and configuration
- **⚡ High Performance**: Optimized for speed with minimal overhead
- **🧪 Thoroughly Tested**: Comprehensive PHPUnit test suite with Orchestra Testbench
- **📦 Easy Installation**: Simple Composer installation with auto-discovery

📋 Requirements
--------------

[](#-requirements)

- **PHP**: 8.1 or higher
- **Extensions**: `ext-gmp` (for 64-bit operations)
- **Dependencies**: `jenssegers/optimus ^1.1`
- **Laravel**: 10.0+ (optional, for Laravel integration)

📦 Installation
--------------

[](#-installation)

Install the package via Composer:

```
composer require mostafaaminflakes/dual-optimus
```

### Laravel Integration

[](#laravel-integration)

The package automatically registers itself in Laravel 5.5+. For older versions, manually add to `config/app.php`:

```
'providers' => [
    MostafaAminFlakes\DualOptimus\DualOptimusServiceProvider::class,
],

'aliases' => [
    'DualOptimus' => MostafaAminFlakes\DualOptimus\Facades\DualOptimus::class,
],
```

Publish the configuration file:

```
php artisan vendor:publish --provider="MostafaAminFlakes\DualOptimus\DualOptimusServiceProvider"
```

⚙️ Configuration
----------------

[](#️-configuration)

### Environment Variables

[](#environment-variables)

Add these variables to your `.env` file:

```
# 64-bit configuration (recommended for new projects)
DUAL_OPTIMUS_PRIME_64=9223372036854775783
DUAL_OPTIMUS_INVERSE_64=9223372036854775783
DUAL_OPTIMUS_RANDOM_64=4611686018427387904

# 32-bit configuration (for backward compatibility)
DUAL_OPTIMUS_PRIME_32=1580030173
DUAL_OPTIMUS_INVERSE_32=59260789
DUAL_OPTIMUS_RANDOM_32=1163945558
```

### Configuration File

[](#configuration-file)

The published `config/dual-optimus.php` file contains:

```
return [
    'default' => 'main',

    'connections' => [
        'main' => [
            'prime'   => env('DUAL_OPTIMUS_PRIME_64', 9223372036854775783),
            'inverse' => env('DUAL_OPTIMUS_INVERSE_64', 9223372036854775783),
            'random'  => env('DUAL_OPTIMUS_RANDOM_64', 4611686018427387904),
            'size'    => 64,
        ],

        'legacy' => [
            'prime'   => env('DUAL_OPTIMUS_PRIME_32', 1580030173),
            'inverse' => env('DUAL_OPTIMUS_INVERSE_32', 59260789),
            'random'  => env('DUAL_OPTIMUS_RANDOM_32', 1163945558),
            'size'    => 32,
        ],
    ],
];
```

🚀 Usage
-------

[](#-usage)

### Basic Usage

[](#basic-usage)

```
use MostafaAminFlakes\DualOptimus\Facades\DualOptimus;

// Automatic bit-size detection
$encoded = DualOptimus::encode(123);           // Uses 32-bit (legacy connection)
$decoded = DualOptimus::decode($encoded);      // Returns: 123

// Large values automatically use 64-bit
$bigEncoded = DualOptimus::encode(9876543210); // Uses 64-bit (main connection)
$bigDecoded = DualOptimus::decode($bigEncoded); // Returns: 9876543210
```

### Force 64-bit Operations

[](#force-64-bit-operations)

```
// Force 64-bit encoding for any value
$encoded64 = DualOptimus::encode64(123);
$decoded64 = DualOptimus::decode64($encoded64);
```

### Multiple Connections

[](#multiple-connections)

```
// Use specific connections
$mainConnection = DualOptimus::connection('main');     // 64-bit
$legacyConnection = DualOptimus::connection('legacy'); // 32-bit

$mainEncoded = $mainConnection->encode(123);
$legacyEncoded = $legacyConnection->encode(123);

// List available connections
$connections = DualOptimus::getConnections(); // ['main', 'legacy']
```

### Direct Manager Usage

[](#direct-manager-usage)

```
$manager = app('dual-optimus');

// Use default connection
$encoded = $manager->encode(123);
$decoded = $manager->decode($encoded);

// Get specific connection
$connection = $manager->connection('main');
$encoded = $connection->encode(123);
```

### Access Underlying Optimus

[](#access-underlying-optimus)

```
// Access the Jenssegers\Optimus instance for 32-bit operations
$optimus32 = DualOptimus::getOptimus32();
$encoded = $optimus32->encode(123);

// Use Optimus utilities
$prime = \Jenssegers\Optimus\Optimus::generateRandomPrime();
$inverse = \Jenssegers\Optimus\Optimus::calculateInverse($prime);
```

🔧 Artisan Commands
------------------

[](#-artisan-commands)

Generate new Optimus keys:

```
# Generate 32-bit keys
php artisan dual-optimus:generate 32

# Generate 64-bit keys
php artisan dual-optimus:generate 64
```

🧪 Testing
---------

[](#-testing)

Run the complete test suite:

```
composer test
```

Run tests with coverage report:

```
composer test-coverage
```

Run specific test suites:

```
# Unit tests only
vendor/bin/phpunit tests/Unit

# Feature tests only
vendor/bin/phpunit tests/Feature
```

🔄 Migration from Jenssegers\\Optimus
------------------------------------

[](#-migration-from-jenssegersoptimus)

Dual Optimus is a **100% drop-in replacement** for Jenssegers\\Optimus:

```
// Before (Jenssegers\Optimus)
$optimus = new \Jenssegers\Optimus\Optimus($prime, $inverse, $random);
$encoded = $optimus->encode(123);

// After (Dual Optimus) - same result!
$encoded = DualOptimus::encode(123);

// Access original Optimus if needed
$originalOptimus = DualOptimus::getOptimus32();
```

**All existing encoded values will decode correctly** - no data migration required!

📊 Performance
-------------

[](#-performance)

Dual Optimus adds minimal overhead while providing significant functionality:

- **32-bit operations**: Identical performance to Jenssegers\\Optimus (uses it directly)
- **64-bit operations**: Optimized GMP operations with caching
- **Auto-detection**: Simple integer comparison with negligible cost
- **Memory usage**: Minimal additional memory footprint

🛡️ Security Considerations
--------------------------

[](#️-security-considerations)

- **Cryptographically Secure**: Uses the same proven algorithms as Jenssegers\\Optimus
- **No Data Leakage**: Values are obfuscated, not encrypted (reversible by design)
- **Key Management**: Store your prime/inverse/random values securely
- **Environment Variables**: Use `.env` files and never commit keys to version control

🤝 Contributing
--------------

[](#-contributing)

We welcome contributions! Please follow these steps:

1. **Fork** the repository
2. **Create** a feature branch (`git checkout -b feature/amazing-feature`)
3. **Add tests** for new functionality
4. **Ensure** all tests pass (`composer test`)
5. **Commit** your changes (`git commit -m 'Add amazing feature'`)
6. **Push** to the branch (`git push origin feature/amazing-feature`)
7. **Open** a Pull Request

### Development Setup

[](#development-setup)

```
git clone https://github.com/mostafaaminflakes/dual-optimus.git
cd dual-optimus
composer install
composer test
```

📝 Changelog
-----------

[](#-changelog)

### v1.0.0 - Initial Release

[](#v100---initial-release)

- ✅ 64-bit ID support with automatic detection
- ✅ Full backward compatibility with 32-bit IDs
- ✅ Multiple connections support
- ✅ Laravel service provider and facade
- ✅ Comprehensive test suite with 100% coverage
- ✅ Artisan command for key generation

📄 License
---------

[](#-license)

This package is open-sourced software licensed under the [MIT License](LICENSE).

🙏 Credits
---------

[](#-credits)

- **[Mostafa Amin](https://github.com/mostafaaminflakes)** - Creator and maintainer
- **[Jens Segers](https://github.com/jenssegers)** - Original Optimus package
- **All contributors** who help improve this package

🆘 Support
---------

[](#-support)

- **Documentation**: [GitHub Wiki](https://github.com/mostafaaminflakes/dual-optimus/wiki)
- **Issues**: [GitHub Issues](https://github.com/mostafaaminflakes/dual-optimus/issues)
- **Discussions**: [GitHub Discussions](https://github.com/mostafaaminflakes/dual-optimus/discussions)

---

**Made with ❤️ for the PHP community**

###  Health Score

30

—

LowBetter than 64% of packages

Maintenance58

Moderate activity, may be stable

Popularity2

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity46

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 ~3 days

Total

2

Last Release

274d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/65bbfc480a59a21d49c999779ff5bf4101bead9213268e2edcf37637937340ae?d=identicon)[mostafaamin](/maintainers/mostafaamin)

---

Top Contributors

[![mostafaaminflakes](https://avatars.githubusercontent.com/u/57087273?v=4)](https://github.com/mostafaaminflakes "mostafaaminflakes (15 commits)")

---

Tags

laravelencodingidobfuscation64-bit32-bit

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/mostafaaminflakes-dual-optimus/health.svg)

```
[![Health](https://phpackages.com/badges/mostafaaminflakes-dual-optimus/health.svg)](https://phpackages.com/packages/mostafaaminflakes-dual-optimus)
```

###  Alternatives

[cybercog/laravel-optimus

An Optimus bridge for Laravel. Id obfuscation based on Knuth's multiplicative hashing method.

192564.1k](/packages/cybercog-laravel-optimus)[delight-im/ids

Short, obfuscated and efficient IDs for PHP

289.5k1](/packages/delight-im-ids)[matriphe/laraciproid

Indonesia city and province data migration and seeder for Laravel.

232.5k](/packages/matriphe-laraciproid)

PHPackages © 2026

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