MemorableIds (Memorable IDs v0.1.0)
View SourceMemorable ID Generator
A flexible library for generating human-readable, memorable identifiers. Uses combinations of adjectives, nouns, verbs, adverbs, and prepositions with optional numeric/custom suffixes.
Summary
Functions
Calculate collision probability using Birthday Paradox
Calculate total possible combinations for given configuration
Default suffix generator - random 3-digit number
Generate a memorable ID
Get collision analysis for different ID generation scenarios
Parse a memorable ID back to its components
Collection of predefined suffix generators
Functions
Calculate collision probability using Birthday Paradox
Examples
iex> total_combinations = MemorableIds.calculate_combinations(2)
iex> prob = MemorableIds.calculate_collision_probability(total_combinations, 100)
iex> is_float(prob) and prob >= 0.0 and prob <= 1.0
true
iex> total_combinations = MemorableIds.calculate_combinations(3)
iex> prob = MemorableIds.calculate_collision_probability(total_combinations, 10000)
iex> is_float(prob) and prob >= 0.0 and prob <= 1.0
true
Calculate total possible combinations for given configuration
Examples
iex> combinations = MemorableIds.calculate_combinations(2)
iex> stats = MemorableIds.Dictionary.stats()
iex> combinations == stats.adjectives * stats.nouns
true
iex> combinations = MemorableIds.calculate_combinations(2, 1000)
iex> stats = MemorableIds.Dictionary.stats()
iex> combinations == stats.adjectives * stats.nouns * 1000
true
iex> combinations = MemorableIds.calculate_combinations(3)
iex> stats = MemorableIds.Dictionary.stats()
iex> combinations == stats.adjectives * stats.nouns * stats.verbs
true
Default suffix generator - random 3-digit number
Examples
iex> suffix = MemorableIds.default_suffix()
iex> String.match?(suffix, ~r/^\d{3}$/)
true
iex> suffix = MemorableIds.default_suffix()
iex> String.length(suffix)
3
Generate a memorable ID
Options
:components
- Number of word components (1-5, default: 2):suffix
- Suffix generator function (default: nil):separator
- Separator between parts (default: "-")
Examples
iex> id = MemorableIds.generate()
iex> String.contains?(id, "-")
true
iex> id = MemorableIds.generate(%{components: 3})
iex> length(String.split(id, "-"))
3
iex> id = MemorableIds.generate(%{components: 2, suffix: &MemorableIds.default_suffix/0})
iex> String.match?(id, ~r/.*-\d{3}$/)
true
iex> id = MemorableIds.generate(%{components: 2, separator: "_"})
iex> String.contains?(id, "_")
true
Get collision analysis for different ID generation scenarios
Examples
iex> analysis = MemorableIds.get_collision_analysis(2)
iex> expected = MemorableIds.calculate_combinations(2)
iex> analysis.total_combinations == expected
true
iex> analysis = MemorableIds.get_collision_analysis(2)
iex> is_list(analysis.scenarios)
true
iex> analysis = MemorableIds.get_collision_analysis(2)
iex> length(analysis.scenarios) >= 0
true
Parse a memorable ID back to its components
Examples
iex> MemorableIds.parse("cute-rabbit-042")
%{components: ["cute", "rabbit"], suffix: "042"}
iex> MemorableIds.parse("large-fox-swim")
%{components: ["large", "fox", "swim"], suffix: nil}
iex> MemorableIds.parse("cute_rabbit_123", "_")
%{components: ["cute", "rabbit"], suffix: "123"}
Collection of predefined suffix generators
Examples
iex> generators = MemorableIds.suffix_generators()
iex> is_map(generators)
true
iex> generators = MemorableIds.suffix_generators()
iex> is_function(generators.number, 0)
true