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