Ruby %10)-对10的最接近倍数进行补充

Ruby %10)-对10的最接近倍数进行补充,ruby,algorithm,check-digit,Ruby,Algorithm,Check Digit,描述中有错误,因为若结果是130,那个么10的下一个大倍数是140,差是10,这对于数字来说是不正确的结果(它可能是0) 其他更快的解决方案如下(展开所有循环,只需硬编码所有内容): 这只是一个非常简单的解决方案,不值得解释,除非有人要求它将您的数字传递到下面的方法,它将返回附加了校验和数字的数字。 引用自: def添加检查数字(代码值) 总和=0 代码_值。到_s.拆分(/)。每个_与_索引{i,索引| sum=sum+(i[0]。到_i*((索引+1)。偶数±3:1))} 校验位=总和0?0

描述中有错误,因为若结果是130,那个么10的下一个大倍数是140,差是10,这对于数字来说是不正确的结果(它可能是0)

其他更快的解决方案如下(展开所有循环,只需硬编码所有内容):
这只是一个非常简单的解决方案,不值得解释,除非有人要求它

将您的数字传递到下面的方法,它将返回附加了校验和数字的数字。 引用自:

def添加检查数字(代码值)
总和=0
代码_值。到_s.拆分(/)。每个_与_索引{i,索引| sum=sum+(i[0]。到_i*((索引+1)。偶数±3:1))}
校验位=总和0?0:(10-(总和%10))

return(code_value.to_s.split(//)将您的数字传递到下面的方法,它将返回附加了校验和数字的数字。 引用自:

def添加检查数字(代码值)
总和=0
代码_值。到_s.拆分(/)。每个_与_索引{i,索引| sum=sum+(i[0]。到_i*((索引+1)。偶数±3:1))}
校验位=sum.zero±0:(10-(总和%10))

返回(代码值到分割(/)描述似乎相当清楚。是否有什么特别的事情让你感到困难?我只是不知道从哪里开始实施步骤的逻辑。描述似乎相当清楚。是否有什么特别的事情让你感到困难?我只是不知道从哪里开始实施步骤的逻辑。C将它与
偶数?
奇数?
每一个带有索引的元素结合起来,这应该是小菜一碟。它在Ruby中不流畅,那么它可能是事件硬编码的索引集,没关系。跟踪号是固定长度的字符串。@Benoit:我不一定“流畅”在Ruby中,但我很想看看您如何使用
偶数?
奇数?
每个带索引的_
@Shpigford
索引。奇数?
索引。偶数?
数字_string.chars。每个带_索引的{char char,index |…您的代码放在这里…}
。这就是你的想法吗?将它与
偶数?
奇数?
结合起来,每个带有索引的\u都应该是小菜一碟。它在Ruby中不流畅,那么它可能是事件硬编码的索引集,这无关紧要。跟踪号是固定长度的字符串。@Benoit:我不一定“流畅”在Ruby中,但我很想看看你如何使用
偶数?
奇数?
每个带索引的_
@Shpigford
索引。奇数?
索引。偶数?
数字_string.chars。每个带索引的{char,index |…你的代码放在这里。
。这就是你的想法吗?
number_string[idx].to_i
number_string[idx..idx].to_i
bar_code_data = "961102098765431234567C"
digits_with_position = bar_code_data.reverse[1..14].split(//).map(&:to_i).zip(2..1/0.0)
sum = digits_with_position.map{|i| i[0] * (i[1].even? ? 3 : 1)}.reduce(+:)
sum = (in[2] + in[4] + in[6] + ...)*3 + (in[3] + in[5] + in[7] + ...)
sum = in[2]*3 + in[3]*1 + in[4]*3 + in[5]*1 + in[6]*3 + in[7]*1 + ...
check_code = 10 - (sum % 10)
d = "961102098765431234567C".split(//) # avoid having to use [-2..-2] in Ruby 1.8
sum_even = d[-2].to_i + d[-4].to_i + d[-6].to_i + d[-8].to_i + d[-10].to_i + d[-12].to_i + d[-14].to_i
sum_odd = d[-3].to_i + d[-5].to_i + d[-7].to_i + d[-9].to_i + d[-11].to_i + d[-13].to_i + d[-15].to_i
sum = sum_even * 3 + sum_odd
check_code = 10 - sum % 10
def add_check_digit(code_value) 
   sum = 0
   code_value.to_s.split(//).each_with_index{|i,index| sum = sum + (i[0].to_i * ((index+1).even? ? 3 : 1))}
   check_digit = sum.zero? ? 0 : (10-(sum % 10))
   return (code_value.to_s.split(//)<<check_digit).join("")
end