MemorableIds (Memorable IDs v0.1.0)

View Source

Memorable 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(total_combinations, generated_ids)

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_combinations(components \\ 2, suffix_range \\ 1)

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()

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(options \\ %{})

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(components \\ 2, suffix_range \\ 1)

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(id, separator \\ "-")

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"}

suffix_generators()

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