如何将校验和添加到字符串

时间:2014-12-03 01:51:14

标签: ruby checksum

我不确定这是否是正确的询问方式。如何将校验和算法集成到我的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

1 个答案:

答案 0 :(得分:1)

我确定添加校验和不是一个好主意,右边是字符串。因为你必须自己控制某种分隔符 。例如,下面的代码有明显的错误,如果原始字符串包含冒号:字符,它将无效。

下一步是实施。我认为,最好避免自己实现这样的算法,直到你成为数值计算的专家。最好的方法是使用现有的东西,如 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!