Better product keys with Flexkey
June 12, 2014 • Permalink • GitHub • RubyGems
If you've ever built an e-commerce or SAAS application, there's a good chance you've provided your customers or users with randomly-generated product keys, invoice numbers, redemption codes, order numbers, etc. Flexkey is a Ruby gem to assist in this process.
Consider a standard "Microsoft-style" product key: QPFLS-3OM4I-QQWXS-3QWX0-YQGSP. With Flexkey, generating keys in this format is a simple two-liner:
keygen = Flexkey::Generator.new(format: 'ccccc-ccccc-ccccc-ccccc-ccccc',
char_pool: { 'c' => { alpha_upper: 0.75, numeric: 0.25 } })
keygen.generate
# => "9PLRN-IHJ8R-6SYO1-3KWSG-ILA39"
Although it's certainly easy to write one-off code to do the same, I've found myself writing this same code repeatedly, so instead I've created this gem. Other use cases for the gem might be an e-commerce app where different products need identifying strings with different formats, or perhaps a multi-tenant platform where users or administrators need to generate keys in a format of their choice. Flexkey is even versatile enough to function as a password generator.
The gem includes the following features:
- Straightforward key format specification
- Ability to generate a single key or many unique keys
- Built-in character types (alphabetical, numeric, symbolic, etc.)
- Proportional character sampling (e.g. selecting from a pool of 75% letters and 25% numerals as seen above)
- Custom character pools
Installation instructions, documentation, and additional examples are available at the Flexkey GitHub repo or go straight to RubyGems to install.