Generate easy to remember sentences that acts as human readable UUIDs 🥳

Overview

uuid-readable-rs

Easy to remember unique sentences acting as UUID

AGPL License crates.io Released API docs CI

Generate easy to remember sentences that acts as human readable UUIDs.

  • Built on UUID v4
  • Optionally pass your UUID to derive a sentence from it
  • Grammatically correct sentences
  • Easy to remember (or at least part of it)
  • Size choice (32-bit token or 128-bit token using short() or generate() respectively)

Security

This project does not mean to be crypto safe ! Don't use this as a secure random generator.

  • 25^12 possible combinations for generate() (uses 128-bit Token)
  • 25^5 possible combinations for short() (uses 32-bit Token)

Note that the sentence generated by generate() and the original UUID form a bijection, hence no loss of entropy.

Sentence generated

For the long - aka generate() - version, a typical sentence generated by this lib looks like:

Wildon Mollie Behka the bubbler of Arecibo moaned Chavey Haney Torbart and 10 calm kingfishers

Internally this correspond to:

  • 12 bits for a name
  • 11 bits for a name
  • 14 bits for a name
  • 13 bits for a personal noun
  • 13 bits for a place
  • 10 bits for a verb
  • 12 bits for a name
  • 11 bits for a name
  • 14 bits for a name
  • 5 bits for a number
  • 6 bits for an adjective
  • 7 bits for an animal

To ensure no loss of entropy, taking the example of the verb which represents 10 bits, this means that we used a list of verbs of at least 2^10 possibilities (1024).

For the short - aka short() - version, a typical sentence looks like:

Zink recorded by 127 large armadillos

This correspond to:

  • 6 bits for a name
  • 6 bits for a verb
  • 7 bits for a number
  • 8 bits for an adjective
  • 5 bits for an animal

Since the short version is 32 bits long and is derived from a 128-bit UUID, it is not considered as secure or as random as the long version may be. It also does not form any bijection with the original UUID.

Example

use uuid::Uuid;
use uuid_readable_rs::{generate_from, short_from, generate, short, generate_inverse};

// You can define your own UUID and pass it to uuid_readable_rs like so
let uuid = Uuid::new_v4();
let sentence_128: String = generate_from(uuid);
let sentence_32: String = short_from(uuid);

// You can also get an UUID from a sentence that was previously generated
let original_uuid: Uuid = generate_inverse(sentence_128).unwrap();
assert_eq!(uuid, original_uuid);

// Or let uuid_readable_rs handle the Uuid generation
let sentence_128: String = generate();
let sentence_32: String = short();
You might also like...
A silly program written in Rust to output nonsensical sentences in the command line interface.

A silly program written in Rust to output nonsensical sentences in the command line interface.

Timestamp-orderable UUIDs for Python, written in Rust.

UUIDT Timestamp-orderable UUIDs for Python, written in Rust. Installation pip install uuidt Usage import uuidt # Create a new UUIDT u = uuidt.new('my

Rust crate for reconstructing Arabic sentences to be used in applications that don't support Arabic

Arabic Reshaper Rust Reconstruct Arabic sentences to be used in applications that don't support Arabic script. Usage: resahpe a single line of string

Remember me my commands
Remember me my commands

mme is a search tool that helps you to print commands and their description using a custom file. Installation The binary name for rememberme is mme. A

Store your transfer.sh links, so you can remember them later and know when they will expire, but now written in Rust.

Transfer.sh helper Rusted The idea of the script is to store your transfer.sh links and simplify its usage, so you can remember them later and know wh

You have been an apprentice to a powerful sorcerer for as long as you can remember.
You have been an apprentice to a powerful sorcerer for as long as you can remember.

You have been an apprentice to a powerful sorcerer for as long as you can remember. However you dream of becoming a rancher, raising animals in your own pen.

GPT-3 powered CLI tool to help you remember bash commands.

Rusty: GPT-3 Powered CLI Tool Convert natural language into executable commands directly from the terminal! Open source CLI tool powered by OpenAI (br

Remember how cool smlinux was? It's now time to bring it back.

smbuilder Remember how cool smlinux was? It's now time to bring it back. What is smbuilder? In short, smbuilder (stylized as all lowercase) is an app

A Bevy plugin to easily create and manage windows that remember where they were.

bevy-persistent-windows A Bevy plugin to easily create and manage windows that remember where they were. Background When you're developing a game, thu

Fluent assertion library for Rust with readable messages.

Assertor Assertor makes test assertions and failure messages more human-readable. Assertor is heavily affected by Java Truth in terms of API design an

📦 Transpile readable code into DiamondFire templates

Welcome to fudge 👋 📦 Transpile readable code into DiamondFire templates Author 👤 BumpyBill & DADp Show your support Give a ⭐️ if this project helpe

🤯 A brainf*ck-style programming language, but readable

🤯 Brainease Brainease is a brainf*ck-style programming language, but readable. $ cargo install brainease # brainease -f examples/hello.bz save 'H

Read and write ID3 tags with machine-readable input and output

ID3-JSON This project's goal is to provide an easy way to read and write ID3 tags with a consistent input and output. The existing tools I've found re

Costless typed identifiers backed by UUID, with kind readable in serialized versions

Why kind ? With kind, you use typed identifiers in Rust, with no overhead over Uuid have the type be human readable and obvious in JSON and any export

Fast abstraction for converting human-like times into milliseconds.

MS converter library Fast abstraction for converting human-like times into milliseconds. Like, are 1d to 86400000. There are two ways to calculate mil

This is choose, a human-friendly and fast alternative to cut and (sometimes) awk
This is choose, a human-friendly and fast alternative to cut and (sometimes) awk

Choose This is choose, a human-friendly and fast alternative to cut and (sometimes) awk Features terse field selection syntax similar to Python's list

Grep with human-friendly search output
Grep with human-friendly search output

hgrep: Human-friendly GREP hgrep is a grep tool to search files with given pattern and print the matched code snippets with human-friendly syntax high

Codemod - Codemod is a tool/library to assist you with large-scale codebase refactors that can be partially automated but still require human oversight and occasional intervention

Codemod - Codemod is a tool/library to assist you with large-scale codebase refactors that can be partially automated but still require human oversight and occasional intervention. Codemod was developed at Facebook and released as open source.

 HTTPie: human-friendly CLI HTTP client for the API era
HTTPie: human-friendly CLI HTTP client for the API era

HTTPie: human-friendly CLI HTTP client for the API era HTTPie (pronounced aitch-tee-tee-pie) is a command-line HTTP client. Its goal is to make CLI in

Owner
Martin André
I'm Belgian-bred, wander from desk to desk, and welcome bribes in the form of Cat's
Martin André
(Read-only) Generate n-grams

N-grams Documentation This crate takes a sequence of tokens and generates an n-gram for it. For more information about n-grams, check wikipedia: https

Paul Woolcock 26 Dec 30, 2022
Fast and easy random number generation.

alea A zero-dependency crate for fast number generation, with a focus on ease of use (no more passing &mut rng everywhere!). The implementation is bas

Jeff Shen 26 Dec 13, 2022
Easy reading and writing of `serde` structs to/from Google Sheets

serde_sheets Read and write structs directly from google sheets using serde and csv Implement serde::Serialize to write and serde::Deserialize to read

null 5 Jul 20, 2022
🦀 Rust library for printing human readable, relative time differences

?? Rust library for printing human readable, relative time differences

Herbert Lu 31 Aug 6, 2022
Display file sizes in human-readable units

hsize Display file sizes in human-readable units $ hsize 1000 1000000 5000000 1.00 KB 1.00 MB 5.00 MB $ hsize -p 5 1048576 12345678 1.04858 MB 12.345

Ryan 2 Nov 21, 2022
Generate and parse UUIDs.

uuid Here's an example of a UUID: 67e55044-10b1-426f-9247-bb680e5fe0c8 A UUID is a unique 128-bit value, stored as 16 octets, and regularly formatted

Rust Uuid 754 Jan 6, 2023
Generate and translate standard uuids into shorter formats and back.

short-uuid Generate and translate standard UUIDs into shorter or just different formats and back. A port of the JavaScript npm package short-uuid so b

Radim Höfer 3 Feb 28, 2024
Acts as an IRC server and a nostr client. Connect with your IRC client using your nostr private key as the password.

nostr-irc Acts as an IRC server and a nostr client. Connect with your IRC client using your nostr private key as the password. Experimental code, use

null 11 Dec 26, 2022
Text Expression Runner – Readable and easy to use text expressions

ter - Text Expression Runner ter is a cli to run text expressions and perform basic text operations such as filtering, ignoring and replacing on the c

Maximilian Schulke 72 Jul 31, 2022
Uindex is a data store, for data that can be parsed as sentences in some context-free language.

Uindex - Universal index Uindex is a data store, for data that can be parsed as sentences in some context-free language.

Enrique Pérez Arnaud 3 Jul 20, 2021