【C言語】シンプルなユーザ認証システムを作成してみた
組み込みなんかでよく使用されているC言語です。
構造体、ポインタ、配列等の知識を使って、簡単なユーザ認証システムを作成してみました。
ソースコードの掲載の前に、簡単なシステムの説明をしたいと思います。
システム説明
まず、ユーザ名とパスワードをユーザに入力させます。
そのユーザ名とパスワードを用いて、保存済みのデータと照合。
照合してユーザ名とパスワードが一致していれば、「ようこそ、〇〇さん!」と表示します。
もし、いずれかがデータと一致しなければ、「ユーザ名かパスワードが間違っています。」と表示します。
必要な知識
これからお見せするソースコードは、
- 変数
- 関数
- 配列/ポインタ
- 構造体
など、C言語の超基礎的な内容が理解できていれば、問題なく解読できるかと思います。
ソースコード
作成したソースコードは、こちら↓です。
// ユーザ認証システム
#include <stdio.h>
#include <string.h>
// 構造体定義
typedef struct {
char userName[20];
char passWord[10];
} authorization;
// 構造体配列
authorization user[5] = {
{"Takuya", "aofua89f"}, {"Masahiro", "pa89faafa"}, {"Goro", "afyaf87a"},
{"Tsuyoshi", "af076a4a"}, {"Shingo", "af76a4ar"}
};
// プロトタイプ宣言
int authorize (char *, char *);
// メイン関数
int main (void) {
// 変数宣言
char name[20];
char pass[10];
int flag = 0; // 呼び出した関数の戻り値確認用
// ユーザ名とパスワードの入力
printf ("ユーザー認証を開始します。ユーザ名を入力してください。\n");
scanf ("%s", name);
printf ("パスワードを入力してください。\n");
scanf ("%s", pass);
// 関数呼び出し
flag = authorize (name, pass);
if (flag == 0) {
printf ("ようこそ、%sさん!\n", name);
}
else {
printf ("ユーザ名かパスワードが間違っています。\n");
}
return 0;
}
// 認証用関数
int authorize (char *name, char *pass) {
// 変数宣言
int loop; // ループ用
// 作成してあるデータから入力されたユーザ名を探す
for (loop = 0; loop < 5; loop++) {
if (strcmp (user[loop].userName, name) == 0) {
// ユーザ名が正しく入力されていた場合の処理
if (strcmp (user[loop].passWord, pass) == 0) {
return 0;
}
}
}
return 1;
}
ソースコードの説明
処理に入る前に、最初に構造体のデータ(配列)を定義してしまいます。
メイン関数では、ユーザ名とパスワードの入力を受け取ります。
その後、authorize関数を呼び出して、こちらで認証処理を行います。
まず、ユーザ名が構造体のデータにあるかを検索します。
strcmp関数で0が戻ってくれば、ユーザ名が正しいことが分かります。
ユーザ名が正しい場合は、同じ理屈でstrcmp関数を使ってパスワードを比較します。
パスワードも一致すれば、ユーザ認証は成功。メイン関数に0を返します。
ユーザ名、パスワード、一方でも一致しなければ1を返します。
実行例
実行結果はこんな感じです。
ちなみに、現在私のPCのC言語環境ですが、CentOSというLinuxの環境を使ってます。
まとめ
今回は、C言語を使ってユーザ認証システムを作ってみました。
これだけだとすごく味気ないので、これから少しずつグレードアップさせていきたいと思います。
機能が拡張出来たら、また記事としてシェアしたいと思います。
テキスト読んでプログラムを打って理解した気にはなるんですけど、実際に自分でプログラムを考えて組んでみると、さらに理解が深まりますよ。
このコードを読んだ方も、この内容を使ってさらに機能を拡張してみてください。
このブログでは、他にもプログラミングの記事をいくつか掲載してますので、
よかったら参考にしてみてください。
最後までお読みいただき、ありがとうございました。