为 R 中的字符串创建唯一的、人类可读的标识符(哈希?)

Create unique, human-readable identifiers (hash?) for strings in R

我有一组字符串需要转换为唯一的短标识符。

标识符应该是:

我考虑过这样做:

string <- c("this is obviously an amateur")
library(digest)
hash <- digest(object = string, algo = "crc32", serialize = FALSE)

导致 "ac32ed9d"。

我的问题是:

我对R不熟悉,但我会尽量给出一般问题的答案。

通常,哈希码会根据给定范围内的给定字符串或对象 (o) 生成一个数字 [0..R]

N = hash(o,R)

您可以使用此数字生成一个短字符串,如下所示:

  1. 选择一系列字符(字母表)以供选择,例如[A-Z,a-z,0-9]。用 L 表示它的大小(例如 L=62)
  2. 计算 N 的 base-L 表示。我们得到一系列数字 a_1,...,a_k,其中每个 a_i 是 [0 .. L-1]
  3. 中的一个数字
  4. 映射每个数字代表的字符:0 -> A, 1 -> B, ..., 62 -> 9

您可以将生成的数字序列截断为您选择的长度 K。

可用序列的数量和冲突概率之间存在一个基本的权衡。当你使用一个好的散列函数时,你可以假设数字 N 在范围内均匀分布。当您选择了 L 个字符的字母表和 K 的序列长度时,碰撞概率为 (1/L)^K.