PHPackages                             malenki/token-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. malenki/token-generator

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

malenki/token-generator
=======================

Simple hex based token generator, may be used in many tasks as slug, token…

00PHP

Since Jun 28Pushed 6y agoCompare

[ Source](https://github.com/malenkiki/token-generator)[ Packagist](https://packagist.org/packages/malenki/token-generator)[ RSS](/packages/malenki-token-generator/feed)WikiDiscussions master Synced 2mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Token Generator
===============

[](#token-generator)

Why?
----

[](#why)

To generate random hex string (by default) using given bytes length.

Very basic working example:

```
use Malenki\TokenGenerator\TokenGenerator;
echo new TokenGenerator(); // yes, __toString available

// a560bd176d5961817050a4c09408b156952d8d53bd7602d28f2844b1faa2995c
```

This is inspired from example given by Akam on [php.net](https://www.php.net/) web site:

How to get it?
--------------

[](#how-to-get-it)

Using **composer** is the good way.

```
composer require malenki/token-generator
```

Play with it
------------

[](#play-with-it)

### Starting bytes

[](#starting-bytes)

In constructor, you may give the byte length you want. If not, default is 32.

```
use Malenki\TokenGenerator\TokenGenerator;

$tg = new TokenGenerator(4);
echo $tg->run(); // the method computing token and returning it

// 791f4dd3 by example
```

But keep in mind it is not the output length, for example, a byte length of 4 gives as a result an output having 8 bytes by default, because default flavors output hex string.

### Flavors

[](#flavors)

Internally, this generator use 3 differents flavors to build tokens, load in this order:

- **Random** flavor defined in `Malenki\TokenGenerator\Flavor\RandomFlavor`
- **Openssl** flavor defined in `Malenki\TokenGenerator\Flavor\OpensslFlavor`
- **Mcrypt** flavor defined in `Malenki\TokenGenerator\Flavor\McryptFlavor` (Note: not available if you have PHP 7.2+)

By default, it tests if the first, **random**, can run on your system, and run it. If it cannot, it tests the second, **openssl** and so on.

### Formaters

[](#formaters)

Formaters allow you to have different output token types. So, by default, the formater used is `hex` (short name) defined in `Malenki\TokenGenerator\Formater\HexFormater` (FQCN).

Formaters are:

- `hex` to get token as **hexadecimal string**
- `alpha` to get token composed of **ASCII letters** from **a** to **z**
- `num` to get token composed of **digits**
- `base64` to get token as a **base 64 encoded string** from its starting generated bytes

You choose the formater by passing its short name to the `TokenGenerator::run()` method. Examples:

```
$tg = new TokenGenerator(2);
printf('A token using `alpha` formater: "%s"'.PHP_EOL, $tg->run('alpha'));
// A token using `alpha` formater: "rkv"
printf('A token using `num` formater: "%s"'.PHP_EOL, $tg->run('num'));
// A token using `num` formater: "60286"
printf('A token using `base64` formater: "%s"'.PHP_EOL, $tg->run('base64'));
// A token using `base64` formater: "8Yk="
printf('A token using `hex` formater: "%s"'.PHP_EOL, $tg->run('hex'));
// A token using `hex` formater: "971b"
```

### Token object

[](#token-object)

Generator does not returned a simple string, it returns an object from class Token, having `__toString()` to get hexadecimal format on string context.

This object contains informations about:

- **flavor** used to build it,
- **formater** used to format it
- **bytes length** choosen to generate it,
- **original bytes string** used to get it,
- its validity too, if a custom flavor used to create it has some bugs (often void string)

Example:

```
$tg = new TokenGenerator(2);
$token = $tg->run();

echo $token->getOriginalBytesLength() . PHP_EOL;
echo $token->getUsedFlavor() . PHP_EOL;
echo $token->getUsedFormater() . PHP_EOL;
echo $token->get() . PHP_EOL;
echo ($token->valid() ?  'yes' : 'no') . PHP_EOL;
echo $token . PHP_EOL;

// 2
// Malenki\TokenGenerator\Flavor\RandomFlavor
// Malenki\TokenGenerator\Formater\HexFormater
// 4b31
// yes
// 4b31
```

Add your own flavor(s)
----------------------

[](#add-your-own-flavors)

OK, you like this generator, but you want token having some specific building rules.

It is possible to create your own flavor and use it.

**First** create your flavor class inherits from `Malenki\TokenGenerator\Flavor\Flavor` abstract class.

This abstract class has this methods you must implement:

```
abstract class Flavor
{
    abstract public function valide() : bool; // can load on the system?
    abstract public function generate(int $length) : string; // generate the token
}
```

Lets define your class FQCN as `Some\Namespace\YourFlavor`.

**Second**, declare it to generator while instanciate it, so, it knows its existance and can use it.

```
use Malenki\TokenGenerator\TokenGenerator;
use Some\Namespace\YourFlavor;

$tg = new TokenGenerator(32, new YourFlavor);
echo $tg->run();
```

And voilà! You get your first token using your own flavor!

Add your own formatters
-----------------------

[](#add-your-own-formatters)

As easy as creating custom Flavor.

Just implements the abstract class `Malenki\TokenGenerator\Formater\Formater`:

```
abstract class Formater
{
    abstract public function format(string $original) : string;
}
```

For example, your formater may include a date string before a hex part:

```
use Malenki\TokenGenerator\Formater\Formater;

class CustomFormater extends Formater
{
    public function format(string $original) : string
    {
        $dt = new \DateTime();
        $dtStr = $dt->format('Y-m-d-');
        $preToken = bin2hex($original);

        return $dtStr.$preToken;
    }
}
```

Now, declare it to the generator:

```
$tg = new TokenGenerator(2);
$tg->addFormater('custom', CustomFormater::class);
echo $tg->run('custom'). PHP_EOL;

// 2019-06-28-ea15
```

Simple, isn’t it?

###  Health Score

17

—

LowBetter than 6% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity37

Early-stage or recently created project

 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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/6af62130bd16d4e6bbaa5877829b6377386ef9fb6593592052dbb6eeb87c4a02?d=identicon)[malenki](/maintainers/malenki)

---

Top Contributors

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

### Embed Badge

![Health badge](/badges/malenki-token-generator/health.svg)

```
[![Health](https://phpackages.com/badges/malenki-token-generator/health.svg)](https://phpackages.com/packages/malenki-token-generator)
```

###  Alternatives

[wwwision/dcb-eventstore

Implementation of the Dynamic Consistency Boundary pattern described by Sara Pellegrini

2131.5k10](/packages/wwwision-dcb-eventstore)

PHPackages © 2026

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