我不确定这是不是正确的提问方式。如何将校验和算法集成到label字符串中。我已经研究过奇偶校验字节,但并不真正理解按位运算符(XOR)。我只想要一个字符串的单字符散列。

class Integer
def to_bin(width)
    '%0*b' % [width, self]
end

sequence_id = 1.to_bin(24)
library = '3467ACDEFGHJKMNP'

prefix = library[12]

label = prefix + sequence_id.scan(/\d{4}/).reverse.each_with_object(String.new) do |n,obj|
    obj << library[n.to_i(2)]
end

p sequence_id
p label

end

最佳答案

我确信在字符串中加上校验和是不好的。因为你必须自己控制某种分离器。例如,下面的代码有一个明显的错误,如果原始字符串包含冒号:字符,它将不起作用。
下一点是实施。我认为,在你成为数值计算专家之前,最好不要自己实现这种算法最好的方法是使用现有的诸如MD5和CRC32之类的东西。我认为md5对于这个任务来说相当重,所以让我们使用CRC32
代码如下:

require 'zlib'

# This is sample string
strings = ['Hello', 'World', '!']
# Create array where each element
# has original string folowed by colon
# and CRC32 of original string
strings_with_crc = strings.collect do |string|
  string + ':' + Zlib.crc32(string).to_s
end

# Now we can check it!
def crc32check(array)
  array.each do |e|
    string, crc32 = e.split(':')
    print "Checking '#{string}' with '#{crc32}' crc32 sum... "
    puts Zlib.crc32(string) === crc32.to_i ? 'Ok.' : 'FAIL!'
  end
end

puts "Checkin just created array with correct sums:"
crc32check(strings_with_crc)

puts "Checkin new array with wrong sum:"
crc32check(["Hello:42", "World:4223024711", "!:123456"])

以下是脚本的输出:
Checkin just created array with sums.Checking 'Hello' with '4157704578' crc32 sum... Ok.Checking 'World' with '4223024711' crc32 sum... Ok.Checking '!' with '2657877971' crc32 summ... Ok.
Checkin new array with wrong summ.Checking 'Hello' with '42' crc32 sum... FAIL!Checking 'World' with '4223024711' crc32 sum... Ok.Checking '!' with '123456' crc32 sum... FAIL!

关于ruby - 如何将校验和添加到字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27262348/

10-13 08:05