湿潤周囲長計算機 - 水理工学と流体力学の必需品
台形、長方形/正方形、円形パイプなどのさまざまなチャネル形状の湿潤周囲長を計算します。水理工学や流体力学のアプリケーションに不可欠です。
ULIDジェネレーター
生成されたULID:
ULID構造
タイムスタンプ(10文字)
ランダム性(16文字)
ドキュメント
ULIDジェネレーター
はじめに
ULID(Universally Unique Lexicographically Sortable Identifier)は、タイムスタンプとランダムデータを組み合わせて26文字の文字列を生成するユニークな識別子です。ULIDは、非常に高い一意性とランダム性を維持しながら、辞書順にソート可能であるように設計されています。
ULIDの構造
ULIDは主に2つの部分から構成されています:
- タイムスタンプ(10文字):最初の10文字は、Unixエポック(1970-01-01)からのミリ秒を表します。
- ランダム性(16文字):残りの16文字は、暗号的に安全なランダムデータを使用して生成されます。
結果として得られる26文字の文字列は、CrockfordのBase32アルファベット(0-9およびA-Z、I、L、O、Uを除く)を使用してエンコードされます。
フォーミュラ
ULIDは次のステップを使用して生成されます:
- 48ビットのタイムスタンプ(Unixエポックからのミリ秒)を生成します。
- 80ビットの暗号的に安全なランダムデータを生成します。
- 結合された128ビットをCrockfordのBase32エンコーディングを使用してエンコードします。
計算
ULIDジェネレーターは次のステップを実行します:
- 現在のミリ秒単位のタイムスタンプを取得します。
- 暗号的に安全な乱数生成器を使用して10バイト(80ビット)のランダムデータを生成します。
- タイムスタンプとランダムデータを128ビットの整数に結合します。
- 128ビットの整数をCrockfordのBase32エンコーディングを使用してエンコードします。
使用例
ULIDはさまざまなシナリオで役立ちます:
- データベースキー:ULIDはデータベースレコードのユニークな識別子として使用でき、一意性とソート可能性を保証します。
- 分散システム:分散環境では、ノード間の調整なしにULIDを生成できます。
- ロギングとトレーシング:ULIDはログエントリやイベントをタグ付けするために使用でき、ソート可能でユニークな識別子を提供します。
- URLフレンドリーなID:ULIDはURLに安全であり、WebアプリケーションのURL内の識別子として使用できます。
代替案
ULIDは多用途ですが、考慮すべき他のユニーク識別子システムもあります:
- UUID(Universally Unique Identifier):タイムスタンプコンポーネントを含まない128ビットの識別子。
- KSUID(K-Sortable Unique IDentifier):ULIDに似ていますが、異なるタイムスタンプエンコーディングを使用しています。
- Snowflake ID:Twitterの分散ユニークID生成システムで、タイムスタンプとワーカーIDを含みます。
歴史
ULIDは2016年にAlizain FeerastaによってUUIDの代替として導入されました。ULIDは、特にソート可能性と可読性の観点からUUIDのいくつかの制限に対処するために設計されました。ULID仕様は導入以来安定しており、さまざまなプログラミング言語で利用可能な実装があります。
例
以下は、異なるプログラミング言語でULIDを生成するコード例です:
1// JavaScript実装
2function generateULID() {
3 const timestamp = Date.now().toString(36).padStart(10, '0');
4 const randomness = crypto.getRandomValues(new Uint8Array(16))
5 .reduce((acc, byte) => acc + byte.toString(36).padStart(2, '0'), '');
6 return (timestamp + randomness).toUpperCase();
7}
8
9console.log(generateULID());
10
1## Python実装
2import time
3import secrets
4import base64
5
6def generate_ulid():
7 timestamp = int(time.time() * 1000).to_bytes(6, byteorder="big")
8 randomness = secrets.token_bytes(10)
9 return base64.b32encode(timestamp + randomness).decode("ascii").lower()
10
11print(generate_ulid())
12
1// Java実装
2import java.security.SecureRandom;
3import java.time.Instant;
4
5public class ULIDGenerator {
6 private static final SecureRandom random = new SecureRandom();
7 private static final char[] ENCODING_CHARS = "0123456789ABCDEFGHJKMNPQRSTVWXYZ".toCharArray();
8
9 public static String generateULID() {
10 long timestamp = Instant.now().toEpochMilli();
11 byte[] randomness = new byte[10];
12 random.nextBytes(randomness);
13
14 StringBuilder result = new StringBuilder();
15 // タイムスタンプをエンコード
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // ランダム性をエンコード
21 for (byte b : randomness) {
22 result.append(ENCODING_CHARS[b & 31]);
23 }
24 return result.toString();
25 }
26
27 public static void main(String[] args) {
28 System.out.println(generateULID());
29 }
30}
31
これらの例は、JavaScript、Python、およびJavaでULIDを生成する方法を示しています。これらの関数を特定のニーズに合わせて調整するか、ユニークな識別子を必要とする大規模なシステムに統合できます。
参考文献
- "ULID仕様。" GitHub, https://github.com/ulid/spec. 2024年8月2日アクセス。
- "CrockfordのBase32エンコーディング。" Base32エンコーディング, http://www.crockford.com/base32.html. 2024年8月2日アクセス。
- "UUID対ULID。" Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. 2024年8月2日アクセス。
フィードバック
フィードバックトーストをクリックして、このツールについてのフィードバックを始めてください
関連ツール
ワークフローに役立つかもしれない他のツールを発見してください