PHPackages                             creativecrafts/laravel-secure-random-number-generator - 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. creativecrafts/laravel-secure-random-number-generator

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

creativecrafts/laravel-secure-random-number-generator
=====================================================

A handy package to generate a secure unique random number for a model

1.1.0(1y ago)1328↓50%[2 PRs](https://github.com/CreativeCrafts/laravel-secure-random-number-generator/pulls)MITPHPPHP ^8.3|^8.2CI passing

Since Jun 20Pushed 1y ago1 watchersCompare

[ Source](https://github.com/CreativeCrafts/laravel-secure-random-number-generator)[ Packagist](https://packagist.org/packages/creativecrafts/laravel-secure-random-number-generator)[ Docs](https://github.com/creativecrafts/laravel-secure-random-number-generator)[ RSS](/packages/creativecrafts-laravel-secure-random-number-generator/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (7)Dependencies (12)Versions (10)Used By (0)

laravel-secure-random-number-generator
======================================

[](#laravel-secure-random-number-generator)

[![Latest Version on Packagist](https://camo.githubusercontent.com/0f770b0ba03d0089c247b58b4485dd52d8879c5194a896c2c08855b0ef7630ee/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f63726561746976656372616674732f6c61726176656c2d7365637572652d72616e646f6d2d6e756d6265722d67656e657261746f722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/creativecrafts/laravel-secure-random-number-generator)[![GitHub Tests Action Status](https://camo.githubusercontent.com/30294c3ce2c669e700dad0b4624f8152f12b090b3727716fc62198b9b5b84539/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f63726561746976656372616674732f6c61726176656c2d7365637572652d72616e646f6d2d6e756d6265722d67656e657261746f722f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/creativecrafts/laravel-secure-random-number-generator/actions?query=workflow%3Arun-tests+branch%3Amain)[![GitHub Code Style Action Status](https://camo.githubusercontent.com/1e800c3f009b944505d933fbdbd8b113f052c8c468b33d043c58e714582c0eff/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f63726561746976656372616674732f6c61726176656c2d7365637572652d72616e646f6d2d6e756d6265722d67656e657261746f722f6669782d7068702d636f64652d7374796c652d6973737565732e796d6c3f6272616e63683d6d61696e266c6162656c3d636f64652532307374796c65267374796c653d666c61742d737175617265)](https://github.com/creativecrafts/laravel-secure-random-number-generator/actions?query=workflow%3A%22Fix+PHP+code+style+issues%22+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/5eeb6b62d38cb2303d09001db4b3885a801e607a3a9a5065abc47e12336edf26/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f63726561746976656372616674732f6c61726176656c2d7365637572652d72616e646f6d2d6e756d6265722d67656e657261746f722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/creativecrafts/laravel-secure-random-number-generator)

A handy package to generate a secure unique random number for a model.

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require creativecrafts/laravel-secure-random-number-generator
```

You can publish the config file with:

```
php artisan vendor:publish --tag="secure-random-number-generator-config"
```

This is the contents of the published config file:

```
return [
    /** This is the start of the random number range */
    'from_number_range' => 1000,
    /** This is the end of the random number range */
    'to_number_range' => 9999999,
    /** Prevent infinite recursion */
    'max_retries' => 100,
    /** Enable caching for the generated random numbers */
    'use_cache' => false,
    /** Cache time in seconds */
    'cache_time' => 60,
    /** Default pattern for generating random numbers */
    'default_pattern' => '#####',
    /** Maximum batch size for a single operation*/
    'max_batch_size' => 1000,
    /** Multiplier for candidate generation (higher means more candidates per batch) */
    'batch_candidate_multiplier' => 2,
];
```

Usage
-----

[](#usage)

```
use CreativeCrafts\SecureRandomNumberGenerator\SecureRandomNumberGenerator;
 // Generate a random unique number for a model
 // To make the number unique for a model, the package uses the model's table name and column name to check if the number is unique in the model's table
 // The from and to number range can be empty and the package will use the default number range set in the configuration file
 $tableName = 'users'
 $tableColumn = 'registration_number';
 $fromNumberRange = 100;
 $toNumberRange = 9999999;

 $secureUniqueRandomNumber = SecureRandomNumberGenerator::forModel($fromNumberRange, $toNumberRange, $tableName, $tableColumn,)->generate();

 // Generate a random number with a default value set in the configuration file
 $secureRandomNumber = SecureRandomNumberGenerator::useDefaultConfigNumberRange()->generate();

 // Generate a random number with a custom number range
 $fromNumberRange = 100;
 $toNumberRange = 9999999;
 $secureRandomNumber = SecureRandomNumberGenerator::setNumberRange($fromNumberRange, $toNumberRange)->generate();

 // Generate a random unique number for a model using the default number range set in the configuration file
 $tableName = 'users'
 $tableColumn = 'registration_number';

 $secureUniqueRandomNumber = SecureRandomNumberGenerator::forModelUsingDefaultConfigNumberRange($tableName, $tableColumn)->generate();
```

New Features
------------

[](#new-features)

The Laravel Secure Random Number Generator package has been enhanced with several new methods and trait to provide more flexibility and functionality when generating secure random numbers.

New Methods
-----------

[](#new-methods)

### Batch Generation

[](#batch-generation)

```
/**
 * Generates multiple secure random numbers within the configured range.
 *
 * @param  int  $count  Number of unique random numbers to generate
 * @return array Array of unique secure random numbers
 *
 * @throws RuntimeException If unable to generate enough unique numbers
 */
public function generateBatch(int $count): array;
```

### Formatted Numbers

[](#formatted-numbers)

```
/**
 * Generates a secure random number with optional prefix and suffix.
 *
 * @param  string  $prefix  String to prepend to the number
 * @param  string  $suffix  String to append to the number
 * @return string Formatted random number with prefix and suffix
 */
public function generateFormatted(string $prefix = '', string $suffix = ''): string;
```

### Pattern-Based Numbers

[](#pattern-based-numbers)

```
/**
 * Generates a secure random number formatted according to a pattern.
 *
 * The pattern uses # as a placeholder for each digit.
 * Example: "###-###" might produce "123-456"
 *
 * @param  string  $pattern  Format pattern with # as digit placeholders
 * @return string Formatted random number
 *
 * @throws RuntimeException If pattern is invalid or number generation fails
 */
public function generateWithPattern(string $pattern): string;
```

### Batch Formatted Numbers

[](#batch-formatted-numbers)

```
/**
 * Generates multiple secure random numbers with optional prefix and suffix.
 *
 * @param  int  $count  Number of unique random numbers to generate
 * @param  string  $prefix  String to prepend to each number
 * @param  string  $suffix  String to append to each number
 * @return array Array of formatted unique secure random numbers
 *
 * @throws RuntimeException If unable to generate enough unique numbers
 */
public function generateBatchFormatted(int $count, string $prefix = '', string $suffix = ''): array;
```

### Batch Pattern-Based Numbers

[](#batch-pattern-based-numbers)

```
/**
 * Generates multiple secure random numbers formatted according to a pattern.
 *
 * @param  int  $count  Number of unique random numbers to generate
 * @param  string  $pattern  Format pattern with # as digit placeholders
 * @return array Array of formatted unique secure random numbers
 *
 * @throws RuntimeException If unable to generate enough unique numbers
 */
public function generateBatchWithPattern(int $count, string $pattern): array;
```

### Range Customization

[](#range-customization)

```
/**
 * Sets the minimum value for the random number range.
 *
 * @param  int $min  The minimum value (inclusive)
 */
public function min(int $min): self;

/**
 * Sets the maximum value for the random number range.
 *
 * @param  int $max  The maximum value (inclusive)
 */
public function max(int $max): self;
```

### Uniqueness Validation

[](#uniqueness-validation)

```
/**
 * Sets the table and column for uniqueness validation.
 *
 * @param  string  $table  The database table name
 * @param  string  $column  The column name in the table
 */
public function uniqueIn(string $table, string $column): self;
```

Usage
-----

[](#usage-1)

### Generating Multiple Random Numbers

[](#generating-multiple-random-numbers)

```
// Generate 5 unique random numbers
$numbers = SecureRandomNumberGenerator::useDefaultConfigNumberRange()
    ->generateBatch(5);
// Result: [12345, 67890, 54321, 98765, 13579]
```

### Generating Formatted Numbers

[](#generating-formatted-numbers)

```
// Generate a random number with a specific pattern
$phoneNumber = SecureRandomNumberGenerator::setNumberRange(0, 9)
    ->generateWithPattern('###-###-####');
// Result: "123-456-7890"
```

### Generating Multiple Formatted Numbers

[](#generating-multiple-formatted-numbers)

```
// Generate 3 unique invoice numbers
$invoiceNumbers = SecureRandomNumberGenerator::useDefaultConfigNumberRange()
    ->generateBatchFormatted(3, 'INV-', '/2023');
// Result: ["INV-12345/2023", "INV-67890/2023", "INV-54321/2023"]
```

### Generating Multiple Pattern-Based Numbers

[](#generating-multiple-pattern-based-numbers)

```
// Generate 3 unique product codes
$productCodes = SecureRandomNumberGenerator::setNumberRange(0, 9)
    ->generateBatchWithPattern(3, 'PRD-###-###');
// Result: ["PRD-123-456", "PRD-789-012", "PRD-345-678"]
```

### Customizing Number Range

[](#customizing-number-range)

```
// Generate a random number between 1000 and 9999
$pinCode = SecureRandomNumberGenerator::useDefaultConfigNumberRange()
    ->min(1000)
    ->max(9999)
    ->generate();
// Result: 4567
```

### Ensuring Uniqueness in Database

[](#ensuring-uniqueness-in-database)

```
// Generate a unique product code that doesn't exist in the database
$productCode = SecureRandomNumberGenerator::setNumberRange(10000, 99999)
    ->uniqueIn('products', 'product_code')
    ->generate();
// Result: 45678 (guaranteed to be unique in the products.product_code column)
```

Fluent Interface
----------------

[](#fluent-interface)

All methods can be chained for a fluent interface:

```
$result = SecureRandomNumberGenerator::setNumberRange(1, 999)
    ->uniqueIn('orders', 'order_number')
    ->min(100)
    ->max(999)
    ->generateFormatted('ORD-', '-2023');
// Result: "ORD-123-2023" (unique in orders.order_number)
```

Error Handling
--------------

[](#error-handling)

The batch generation methods will throw a RuntimeException if they cannot generate the requested number of unique values after a reasonable number of attempts. Make sure to handle this exception in your code:

```
try {
    $numbers = SecureRandomNumberGenerator::setNumberRange(1, 10)
        ->generateBatch(20); // Trying to generate 20 unique numbers from a range of only 10 possibilities
} catch (RuntimeException $e) {
    // Handle the error - perhaps by increasing the range or decreasing the count
    Log::error('Failed to generate unique numbers: ' . $e->getMessage());
}
```

Trait
-----

[](#trait)

### HasSecureRandomNumber

[](#hassecurerandomnumber)

This trait provides an easy way to automatically generate and assign secure random numbers to your Laravel Eloquent models.

Usage
-----

[](#usage-2)

### Basic Usage

[](#basic-usage)

Add the trait to any Eloquent model where you want to automatically generate a secure random number:

```
