Puid.Chars (puid v2.3.0)

Pre-defined character sets for use when creating Puid modules.

Example

iex> defmodule(AlphanumId, do: use(Puid, chars: :alphanum))

Pre-defined Chars

:alpha

Upper/lower case alphabet

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

bits per character: 5.7

:alpha_lower

Lower case alphabet

abcdefghijklmnopqrstuvwxyz

bits per character: 4.7

:alpha_upper

Upper case alphabet

ABCDEFGHIJKLMNOPQRSTUVWXYZ

bits per character: 4.7

:alphanum

Upper/lower case alphabet and numbers

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789

bits per character: 5.95

:alphanum_lower

Lower case alphabet and numbers

abcdefghijklmnopqrstuvwxyz0123456789

bits per character: 5.17

:alphanum_upper

Upper case alphabet and numbers

ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

bits per character: 5.17

:base16

RFC 4648 base16 character set

0123456789ABCDEF

bits per character: 4

:base32

RFC 4648 base32 character set

ABCDEFGHIJKLMNOPQRSTUVWXYZ234567

bits per character: 5

:base32_hex

RFC 4648 base32 extended hex character set with lowercase letters

0123456789abcdefghijklmnopqrstuv

bits per character: 5

:base32_hex_upper

RFC 4648 base32 extended hex character set

0123456789ABCDEFGHIJKLMNOPQRSTUV

bits per character: 5

:crockford32

Crockford 32

0123456789ABCDEFGHJKMNPQRSTVWXYZ

:decimal

Decimal digits

0123456789

bits per character: 3.32

:hex

Lowercase hexadecimal

0123456789abcdef

bits per character: 4

:hex_upper

Uppercase hexadecimal

0123456789ABCDEF

bits per character: 4

:safe_ascii

ASCII characters from ?! to ?~, minus backslash, backtick, single-quote and double-quote

`!#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_bcdefghijklmnopqrstuvwxyz{|}~`

bits per character: 6.49

:safe32

Strings that don't look like English words and are easier to parse visually

2346789bdfghjmnpqrtBDFGHJLMNPQRT
  • remove all upper and lower case vowels (including y)
  • remove all numbers that look like letters
  • remove all letters that look like numbers
  • remove all letters that have poor distinction between upper and lower case values

bits per character: 6.49

:safe64

RFC 4648 file system and URL safe character set

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_

bits per character: 6

:symbol

:safe_ascii characters not in :alphanum

`!#$%&()*+,-./:;<=>?@[]^_{|}~`

bits per character: 4.81

:wordSafe32

Strings that don't look like English words

23456789CFGHJMPQRVWXcfghjmpqrvwx

Origin unknown

bits per character: 6.49

Summary

Types

Chars can be designated by a pre-defined atom, a binary or a charlist

Character encoding scheme. :ascii encoding uses cross-product character pairs.

Functions

charlist for a pre-defined Puid.Chars, a String.t() or a charlist.

Same as charlist/1 but either returns charlist or raises a Puid.Error

Types

Link to this type

puid_chars()

@type puid_chars() :: atom() | String.t() | charlist()

Chars can be designated by a pre-defined atom, a binary or a charlist

Link to this type

puid_encoding()

@type puid_encoding() :: :ascii | :utf8

Character encoding scheme. :ascii encoding uses cross-product character pairs.

Functions

Link to this function

charlist(chars)

@spec charlist(puid_chars()) :: {:ok, charlist()} | Puid.Error.t()

charlist for a pre-defined Puid.Chars, a String.t() or a charlist.

The characters for either String.t() or charlist types must be unique, have more than one character, and not be invalid ascii.

Example

iex> Puid.Chars.charlist(:safe32)
{:ok, ~c"2346789bdfghjmnpqrtBDFGHJLMNPQRT"}

iex> Puid.Chars.charlist("dingosky")
{:ok, ~c"dingosky"}

iex> Puid.Chars.charlist("unique")
{:error, "Characters not unique"}
Link to this function

charlist!(chars)

@spec charlist!(puid_chars()) :: charlist() | Puid.Error.t()

Same as charlist/1 but either returns charlist or raises a Puid.Error

Example

iex> Puid.Chars.charlist!(:safe32)
~c"2346789bdfghjmnpqrtBDFGHJLMNPQRT"

iex> Puid.Chars.charlist!("dingosky")
~c"dingosky"

iex> Puid.Chars.charlist!("unique")
# (Puid.Error) Characters not unique