Mbrcode
Mbrcode is a lightweight, deterministic, and clean membership code generator for Ruby applications.
It produces stable, structured IDs using the format:
PREFIX + SHARD + "-" + DIGITS
Where:
- PREFIX โ normalized to exactly 4 characters
- SHARD โ numeric grouping/version number
- DIGITS โ auto-incrementing sequence
- Raw length before dashes = EXACTLY 16 characters
Example output:
MBR1-0000-0000-000
Mbrcode is ideal for membership systems, gyms, schools, apps, organizations, ERPs, identity platforms, and anything requiring clean, compact, and consistent codes.
โจ Features
- ๐ Thread-safe incremental counter
- ๐งฉ Smart prefix normalization rules
- ๐ Always 16 raw characters before dash grouping
- ๐ฃ Groups digits into 4-4-4 format when possible
- โ๏ธ Configurable prefix and shard
- ๐ Zero external dependencies
- ๐ Fast, simple, production-ready
๐ฆ Installation
Add to your Gemfile:
gem "mbrcode"Install:
bundle installOr install manually:
gem install mbrcode๐ Usage
Default generation
Mbrcode.generate
# => "MBR1-0000-0000-000"Custom prefix
Mbrcode.generate(prefix: "user")
# => "USER1-0000-0000-000"Multi-word prefix โ initials
Mbrcode.generate(prefix: "karate membership")
# => "KM00-0000-0000-000"Prefix shorter than 4 chars โ padded
Mbrcode.generate(prefix: "ab")
# => "AB00-0000-0000-000"Long prefix โ first 4 characters
Mbrcode.generate(prefix: "customer")
# => "CUST1-0000-0000-000"Custom shard
Mbrcode.generate(prefix: "mbr", shard: 2)
# => "MBR2-0000-0000-000"๐ง Prefix Normalization Rules
| Input Prefix | Output Prefix | Rule Applied |
|---|---|---|
| "m" | "M000" | padded to 4 characters |
| "ab" | "AB00" | padded to 4 characters |
| "karate membership" | "KM00" | initials + padded |
| "ruby on rails" | "ROR0" | initials + padded |
| "customer" | "CUST" | first 4 characters |
| "USER" | "USER" | unchanged (4 chars) |
๐ข 16-Character Enforcement
Before grouping and adding dashes, the ID ALWAYS equals:
PREFIX(4) + SHARD(N) + DIGITS(M) = 16 characters
If the shard leaves no space for digits:
Mbrcode.generate(prefix: "abcd", shard: 999999999)
# => raises "Shard too long"This ensures consistent, predictable, compact membership IDs.
๐งช Testing
Run RSpec tests:
bundle exec rspecAll tests should pass.
๐ Development
Clone the repository:
git clone https://github.com/delacruzjames/mbrcode.git
cd mbrcodeInstall dependencies:
bundle installRun tests:
bundle exec rspec๐ค Contributing
Pull requests are welcome!
Please include tests for new features or bug fixes.
๐ License
Released under the MIT License.
๐ค Author
Sensei James Dela Cruz
Ruby Developer โข API Architect โข Karate Instructor
๐ง Email: delacruzjamesmartin@gmail.com
๐ GitHub: @delacruzjames