チェックディジットとスワップ

最近、勉強してるC言語について

C言語 アルゴリズム 徹底入門』柏原正三

のチェックディジットとスワップのソースを写経しました。

チェックディジット(Check Digit)とは
IDや口座番号などの番号の誤入力を検出するためのアルゴリズムです。
全ての文字を調査するわけでは無いので、完全ではありませんが、
かなり高い確率で誤入力を検出できるようです。

概要
チェックディジットではウェイトと呼ばれるあらかじめ決められた数字を用います。
各桁にウェイトを掛けた合計の1桁目の数値に対する10の補数として求めます。

って言ってもよく分からないので、表を見てくださいwww


ID番号  1 2 3 X
ウェイト 3 4 7 1

                                                                            • -

     4+6+10+1X = 10の倍数

Xの部分がチェックディジットとして扱われる数字です。

ウェイトは任意の数字でかまわないけど、
10の倍数になりやすい2と5を避けたほうが良いみたいです。
あと、ウェイトのチェックディジットに対応する桁は1します。


スワップ(Swap)とは
簡単に言うと入れ替えることです。

ある2つの要素を入れ替える最も基本的な操作の1つです。

概要
例えば、配列Aの指定した2つのインデックスを入れ替えるとしましょう。

その場合は1つ目のインデックスの値をどこかへ退避させ、
2つ目のインデックスに代入します。
そして、1つ目のインデックスに退避させた値を代入します。


補足
C言語で配列の要素数を調べたいときは

int n = sizeof(配列名) / sizeof(配列の型);

という風に求めることが出来ます。