モジュラス10

1) 一番右側のキャラクタを奇数として全てのキャラクタを奇数位置と偶数
   位置に分ける。
2) 奇数位置の値を合計して3倍。
3) 偶数位置の値を合計。
4) 上記2)と3)の合計。
5) 10から4)の1の位の数字を引いた数字がチェックデジット


いまさらだけど、結局毎回調べるのでメモ。


先生!できました!!
C#


public static String AddChkDgt(String inCode)
{
int chkDgt = 0;
for (int i = 0; i < inCode.Length; i++)
chkDgt += int.Parse(inCode.Substring(i, 1)) * *1.ToString() ).Substring( (10 - (chkDgt % 10) ).ToString().Length - 1, 1);
}


最後がひどいね。
あと、
「一番右のキャラクタを奇数として」、なので、
CDを付ける前の数値が偶数桁のものにだった場合、先頭に0をつなげて奇数桁の文字列にしてからここに持ってこないと結果がズレマスわな。
ひどいね。


追記。
string st_chkDgt = (10 - (chkDgt % 10) ).ToString();
return inCode + st_chkDgt.Substring(st_chkDgt.Length - 1, 1);


最後、やるなら、せめてこうなのか?
COBOLerだからわっかんないです。先生。

*1:i % 2) * 2 + 1) ; return inCode + ( (10 - (chkDgt % 10