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.2.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.2-py3-none-any.whl (6.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fourword-1.0.2.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.2.tar.gz
Algorithm Hash digest
SHA256 074864d720145ecb185829831869bdaee420a0fdb8cc72577698bb89314af1b6
MD5 03e595e258e8345ca3df7f5b91ccfaca
BLAKE2b-256 d42529026ab20598152d30b06c0dc4a3a14904807098944b8b849622b91f6c63

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fourword-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 6.6 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d3c15911cec4b700c8b06f88df489a4f089620da7aa2a48bcf10d1cdf5b97e55
MD5 c09f7628495a8ceb4deeaa4e304ccf07
BLAKE2b-256 780ab79f2deff46c708ae05a23e461c4106c264f9722719b3e987ac537919051

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