C#でパスワードの有効性をチェックする方法
パスワードの有効性チェックとは、Webサイトへのサインアップ時にパスワードを作成した経験を思い出せばイメージしやすいでしょう。
パスワードを設定する際、「強固なパスワードを設定してください」といった入力規則(バリデーション)を目にしたことがあるはずです。一般的な要件は以下の通りです。
8文字以上・14文字以下
大文字を1つ以上含む
小文字を1つ以上含む
特殊文字を1つ以上含む
空白文字を含まない
ここからは、それぞれの条件をC#でどのように判定するのか、一つずつ見ていきましょう。
条件1:8文字以上・14文字以下であること
Lengthプロパティで文字列の長さを取得し、許容範囲外であれば false を返します。
if (passwd.Length < 8 || passwd.Length > 14)
return false;
条件2:大文字を1つ以上含むこと
LINQの Any() メソッドと char.IsUpper を組み合わせると、大文字が1文字でも含まれているかを簡潔に判定できます。
if (!passwd.Any(char.IsUpper))
return false;
条件3:小文字を1つ以上含むこと
同様に、char.IsLower を使えば小文字の存在をチェックできます。
if (!passwd.Any(char.IsLower))
return false;
条件4:空白文字を含まないこと
Contains() メソッドで、半角スペースが含まれていないかを確認します。
if (passwd.Contains(" "))
return false;
条件5:特殊文字を1つ以上含むこと
許可する特殊文字の一覧を文字配列として定義し、パスワード内にそのいずれかが含まれているかをループで判定します。
string specialChars = @"%!@#$%^&*()?/>.<,:;'\|}]{[_~`+=-" + "\"";
char[] specialCharArray = specialChars.ToCharArray();
foreach (char ch in specialCharArray)
{
if (passwd.Contains(ch))
return true;
}
すべての条件を組み合わせた完全なサンプルコード
上記のチェックを1つのメソッドにまとめると、次のようなパスワード検証関数が完成します。
using System;
using System.Linq;
class Program
{
static bool IsValidPassword(string passwd)
{
// 8〜14文字であること
if (passwd.Length < 8 || passwd.Length > 14)
return false;
// 大文字を含むこと
if (!passwd.Any(char.IsUpper))
return false;
// 小文字を含むこと
if (!passwd.Any(char.IsLower))
return false;
// 空白を含まないこと
if (passwd.Contains(" "))
return false;
// 特殊文字を含むこと
string specialChars = @"%!@#$%^&*()?/>.<,:;'\|}]{[_~`+=-" + "\"";
if (passwd.IndexOfAny(specialChars.ToCharArray()) == -1)
return false;
return true;
}
static void Main()
{
Console.WriteLine(IsValidPassword("Sample@123")); // True
Console.WriteLine(IsValidPassword("sample123")); // False(大文字・特殊文字なし)
}
}
まとめ
C#では、文字列操作メソッドとLINQを組み合わせることで、パスワードのバリデーションをシンプルかつ読みやすく実装できます。要件に応じて数字の必須化や、正規表現(Regex)による一括チェックを追加すれば、さらに堅牢な検証が可能になります。
-
C言語で点がX軸またはY軸に平行かどうかを判定するプログラム
グラフ上に与えられた n 個の点について、その点群がX軸に平行なのか、Y軸に平行なのか、それともどちらの軸にも平行でないのかを判定する方法を解説します。グラフとは、直角に交わる2つの軸に沿って測定した2つの変数の関係を表す図のことです。「平行」とは、線と線の間隔がどこでも等しい状態を指し、鉄道の線路のように、2本の線がすべての地点で同じ距離を保っている関係をいいます。 つまりここで求めたいのは、「各点の座標と軸との位置関係がすべての点で揃っているかどうか」、すなわち点群がX軸またはY軸に対して平行に並んでいるかどうかという判定です。 軸とは何か グラフはX軸とY軸という2つの軸によって構成さ
-
Pythonで文字列がパングラムかどうかを判定するプログラムの作成方法
本記事では、与えられた文字列がパングラムであるかどうかを判定するPythonプログラムの解法とアプローチについて詳しく解説します。 問題の概要 文字列入力が与えられたとき、その文字列がパングラムであるかどうかを判定するPythonプログラムを作成します。 パングラムとは? パングラムとは、英語のアルファベット26文字すべてを少なくとも1回ずつ含む文章や一連の単語のことです。有名な例として「The quick brown fox jumps over the lazy dog」があります。 解法のアプローチ この問題は、以下の手順で解くことができます。 アルファベット全体を表す基準となる文字列