"求めたいコード(チェックディジット除く11桁)".each_char.with_index.inject(0){|b,(a,i)| b+a.to_i*("46231546231"[i,1].to_i)}%7 Ruby1.8.7で確認。 参考:ヤマト急便のチェックデジットの計算方法 -クロネコヤマトのメール便で- その他(データベース) | 教えて!goo 追記 いろいろ値を変えてみながら試してみたら、どうもコードが連続している限りにおいて、チェックディジットが0..6のループになるようにうまく重み付けされてるみたいだな。チェックディジットが見えないケースがあったので必要に迫られてコード書いたけど、この法則性がわかっていれば大して困らないな。 てことは (チェックディジットを除く11桁)%7 でよくね?