23 Şubat 2018

C# Parola Kontrolü

Parola kontrol için hazır kod.
using System;
using System.Text;

namespace PasswordTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string exit = string.Empty;
            var pi = new PasswordInfo();
            pi.Name = "Name";
            pi.Surname = "Surname";
            while (exit != "exit")
            {
                Console.WriteLine("Enter A Password:");
                pi.Password = Console.ReadLine();
                Console.WriteLine(Program.CheckPasswordFormat(pi).Data.ToString());
            };
        }
        public struct ResultInfo
        {
            public bool Success { get; }
            public object Data { get; }

            public ResultInfo(bool success, object data)
            {
                Success = success;
                Data = data;
            }
        }
        public class PasswordInfo
        {
            string name;
            public string Name {
                get { return name; }
                set { name = value?.Trim(); }
            }
            string surname;
            public string Surname {
                get { return surname; }
                set { surname = value?.Trim(); }
            }
            string password;
            public string Password {
                get { return password; }
                set { password = value?.Trim(); }
            }
        }
        public static ResultInfo CheckPasswordFormat(PasswordInfo pi)
        {
            var error = new ResultInfo(false,
                "En az 6 en, fazla 128 karakter olmalıdır.Türkçe karakter içermeden en az bir büyük, en az bir küçük harf,en az bir rakam ve en az bir özel karakter içermelidir. Örneğin (~!@#$%^&*_-+=`|\\(){}[]:;\"'<>,.?/). Ad ve soyad içermemelidir."
                );

            if (pi.Password == null)
                return error;

            if (pi.Password.Length < 6 || pi.Password.Length > 128)
                return error;

            if (pi.Password.IndexOf(' ') > -1)
                return error;

            if (!string.IsNullOrEmpty(pi.Name))
                if (pi.Name.Length > 2)
                    if (pi.Password.ToLower().IndexOf(pi.Name.ToLower()) > -1)
                        return error;
            if (!string.IsNullOrEmpty(pi.Surname))
                if (pi.Surname.Length > 2)
                    if (pi.Password.ToLower().IndexOf(pi.Surname.ToLower()) > -1)
                        return error;
            var nonAlphaNumericCharacters = "~!@#$%^&*_-+=`|\\(){}[]:;\"'<>,.?/";
            foreach (var c in nonAlphaNumericCharacters)
            {
                if (pi.Password.IndexOf(c) > -1)
                    goto passedNonAlphaNumeric;
            }
            return error;

            passedNonAlphaNumeric:
            for (char c = 'a'; c <= 'z'; c++)
            {
                if (pi.Password.IndexOf(c) > -1)
                    goto passedLowCharacters;
            }
            return error;

            passedLowCharacters:
            for (char c = 'A'; c <= 'Z'; c++)
            {
                if (pi.Password.IndexOf(c) > -1)
                    goto passedCapitalCharacters;
            }
            return error;

            passedCapitalCharacters:
            for (char c = '0'; c <= '9'; c++)
            {
                if (pi.Password.IndexOf(c) > -1)
                    goto passedDigits;
            }
            return error;

            passedDigits:

            //Varsayılan karakterler dışında bir karakter yazıldıysa örneğin:ı,ç,ş,ö,ğ,€
            var sb = new StringBuilder(nonAlphaNumericCharacters);
            for (char c = '0'; c <= '9'; c++)
                sb.Append(c);
            for (char c = 'a'; c <= 'z'; c++)
                sb.Append(c);
            for (char c = 'A'; c <= 'Z'; c++)
                sb.Append(c);
            var allChars = sb.ToString();
            foreach (var c in pi.Password)
            {
                if (allChars.IndexOf(c) == -1)
                    return error;
            }

            return new ResultInfo(true, "OK");
        }

    }
}