たとえば、JANコードのチェックデジット算出方式であるモジュラス10/ウェイト3での正当性検査は
こんな感じに書くと概ね正しい結果を得られる。
function validateCheckDigit(jancode){
var cd = parseInt(jancode.substr(-1, 1));
var jan = jancode.substr(0, jancode.length - 1);
var odd = 0, even = 0;
for(i = 0; i < jan.length; i++){
if(i%2){
even += parseInt(jan.substr(i,1));
}
else{
odd += parseInt(jan.substr(i,1));
}
}
return cd == (10 - ((even * 3 + odd) % 10)) % 10;
}
これをロジックの正当性を維持したまま変形して短くすることにちょっと快感を感じてみたり。
こう、可読性を無視してスレスレの変形を楽しむスリル…!一種のスポーツ的な感じ?
function validateCheckDigit(jan){
var j = jan.substr(0, jan.length - 1);
for(i = 0, t = 0; i < j.length; i++)
t += (j.substr(i,1) - 0) * ((i%2) ? 3 : 1);
return (jan.substr(-1, 1) - 0) == (10 - (t % 10)) % 10;
}
あ、仕事で使うときはちゃんと前者にしますよ…!