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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63b11a086cb277effd66a79691c80b1336003e929b5f34fe7c25c4e0083055ad
|
|
| MD5 |
1bc6c0558e31eada7510b0c4fb6c9d4d
|
|
| BLAKE2b-256 |
949c26a50de375d1d5106ca0311309db2ba27218d0860ab0815aab59aef91d2f
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7e0928535b1092fee7f4dbc212ff3225d158094fecd03dd6a72c1c6ea12be6a3
|
|
| MD5 |
6e8c48c670171b572b359c7965e05f7e
|
|
| BLAKE2b-256 |
ee07ea0077ff9b97738dab5bbc39bc20f077b0a8850136c89d6b8d6986c73eda
|