8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SwiftでUUIDをbase64にして短縮する。

Posted at

UUIDは分散的に生成できて、かなり使いやすいのですがエンコードする時にいかんせん長いです。

E2731BE6-470D-4782-B853-E5B13E8A1ECF
D879A224-9A58-4D71-8E43-B7F3D001B7E4
FFF4DCE4-3C49-459B-BDB9-EB4B5A030FEB

これをそのまま保存するのは流石に避けたい。

UUIDは通常16進法で書かれるので、文字列で保存するならもっと短縮できるはずです。

実装

こんな extensionを実装します。


extension UUID {
    public var base64String: String {
        var base64WithPadding = self.data.base64EncodedString()
        // base64の末尾の==を取り除く
        base64WithPadding.removeLast(2)
        return base64WithPadding
    }
    
    public var data: Data {
        var result = Data()
        let uuidTuple = self.uuid
        result.append(uuidTuple.0)
        result.append(uuidTuple.1)
        result.append(uuidTuple.2)
        result.append(uuidTuple.3)
        result.append(uuidTuple.4)
        result.append(uuidTuple.5)
        result.append(uuidTuple.6)
        result.append(uuidTuple.7)
        result.append(uuidTuple.8)
        result.append(uuidTuple.9)
        result.append(uuidTuple.10)
        result.append(uuidTuple.11)
        result.append(uuidTuple.12)
        result.append(uuidTuple.13)
        result.append(uuidTuple.14)
        result.append(uuidTuple.15)
        return result
    }
}

これで36文字が22文字まで短縮できます。

40CC21EA-7D27-49CC-8A18-280373933BE2 -> QMwh6n0nScyKGCgDc5M74g
2AF87112-E64C-441F-85E1-FD4FCCD097CA -> KvhxEuZMRB+F4f1PzNCXyg
D9C051E6-D7E2-4198-9CB1-A399E347D860 -> 2cBR5tfiQZicsaOZ40fYYA

テスト

以下のコードでテスト

for _ in 0..<10 {
    let id = UUID()
    let data = Data(base64Encoded: id.base64String + "==")!

    let uuid = UUID(uuid: (
        data[0], data[1], data[2], data[3], data[4], data[5],
        data[6], data[7], data[8], data[9], data[10], data[11],
        data[12], data[13], data[14], data[15]
    ))

    print(id, "->", id.base64String, "->", uuid)
}
40CC21EA-7D27-49CC-8A18-280373933BE2 -> QMwh6n0nScyKGCgDc5M74g ->
40CC21EA-7D27-49CC-8A18-280373933BE2

2AF87112-E64C-441F-85E1-FD4FCCD097CA -> KvhxEuZMRB+F4f1PzNCXyg -> 
2AF87112-E64C-441F-85E1-FD4FCCD097CA

D9C051E6-D7E2-4198-9CB1-A399E347D860 -> 2cBR5tfiQZicsaOZ40fYYA -> 
D9C051E6-D7E2-4198-9CB1-A399E347D860

可逆圧縮できている。

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?