Skip to main content

No project description provided

Project description

FourWord

概要

新しいランダム識別子の生成方式です。

先頭にタイムスタンプがあり、テキスト化では文字セットとしてBase32 Hexを使用しているので、時系列順でのソートが可能です。 パディングには=の代わりにZを使用しているため、英数字を使える場所であれば使用できるはずです。

できる限り衝突の可能性を低くしつつオーバーフローも防ぐために、タイムスタンプは固定にせず生成するビット数の1/4を占めるようにしています。 これによりビット数を多くするだけで、より長く継続して使用できます。 ただし代わりに、タイムスタンプ部分の先頭に無駄な連続した0の部分が発生します。

データベースなどで利用することを想定しています。

語源

Fourの部分は、タイムスタンプがビット数の1/4を占めることからです。 それをForwardと掛けています。

全体のビット数はね、うーん...これくらい。タイムスタンプが、4個分くらいかな

Pythonライブラリ

from fourword.lib import FourWord

fourword = FourWord(bits=256)
print(fourword.text)

Pythonではfourwordライブラリを使用してFourWordを生成できます。 fourwordライブラリは外部ライブラリなしで動作します。

デフォルトのビット数は256です。

CLIツール

AIに適当に作らせたCLIツールならあります。 あまりちゃんとテストしていませんが多分動きます。

ライブラリをそのままインストールするとfourword-pyコマンドで使えるようになるはずです。

仕様

FourWordは次のようなバイト列で表現されます。

[ (全体のビット数/4) ビットのUNIXタイムスタンプ(UTC) ] + [ (全体のビット数/4*3) ビットのCSPRNG ]

例えば全体のビット数が256ビットの時、タイムスタンプは64ビット、ランダムな部分は192ビットになります。

全体のビット数は4で割れる、かつ4で割った商をさらに3で割れる必要があります。 つまり全体のビット数は32で割れる必要があります。

テキスト化

テキスト化にはBase32 Hexのようなものを使用します。

前述した通り、パディング文字として=の代わりにZを使用しますが、それ以外はBase32 Hexと同じです。

オーバーフローの時期

各ビット数では、次の時期にオーバーフローします。

ビット数 タイムスタンプビット幅 最大秒数 オーバーフロー時期(概算)
256 64 bit 約 1.84 × 10¹⁹ 秒 西暦約5844億年 (5.845 × 10¹¹ 年)
512 128 bit 約 3.40 × 10³⁸ 秒 約1.07 × 10³¹年後
768 192 bit 約 6.28 × 10⁵⁷ 秒 約1.99 × 10⁵⁰年後
1024 256 bit 約 1.16 × 10⁷⁷ 秒 約3.67 × 10⁶⁹年後
1280 320 bit 約 2.14 × 10⁹⁶ 秒 約6.77 × 10⁸⁸年後
1536 384 bit 約 3.94 × 10¹¹⁵ 秒 約1.25 × 10¹⁰⁸年後
1792 448 bit 約 7.26 × 10¹³⁴ 秒 約2.30 × 10¹²⁷年後
2048 512 bit 約 1.34 × 10¹⁵⁴ 秒 約4.24 × 10¹⁴⁶年後

ライセンス

このリポジトリ内のソースコードやライブラリはMITライセンスの元で自由に使用できます。

FourWordの仕様そのものを利用するソフトウェアや、FourWordで生成したデータなどではクレジット表記は不要です。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fourword-1.0.1.tar.gz (5.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fourword-1.0.1-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

Details for the file fourword-1.0.1.tar.gz.

File metadata

  • Download URL: fourword-1.0.1.tar.gz
  • Upload date:
  • Size: 5.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for fourword-1.0.1.tar.gz
Algorithm Hash digest
SHA256 63b11a086cb277effd66a79691c80b1336003e929b5f34fe7c25c4e0083055ad
MD5 1bc6c0558e31eada7510b0c4fb6c9d4d
BLAKE2b-256 949c26a50de375d1d5106ca0311309db2ba27218d0860ab0815aab59aef91d2f

See more details on using hashes here.

File details

Details for the file fourword-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: fourword-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 6.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for fourword-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7e0928535b1092fee7f4dbc212ff3225d158094fecd03dd6a72c1c6ea12be6a3
MD5 6e8c48c670171b572b359c7965e05f7e
BLAKE2b-256 ee07ea0077ff9b97738dab5bbc39bc20f077b0a8850136c89d6b8d6986c73eda

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page