/// <summary> /// 우편번호가 올바른 형식인 지 확인함. /// </summary> /// <param name="Value">우편번호</param> /// <param name="ErrMsgIs">리턴값이 false일 때 설정되는 에러 메세지</param> /// <example> /// Console.WriteLine(IsZipCode("435050", out ErrMsgIs)); //true /// Console.WriteLine(IsZipCode("435-050", out ErrMsgIs)); //true /// Console.WriteLine(IsZipCode("43550", out ErrMsgIs)); //false /// Console.WriteLine(IsZipCode("43-5050", out ErrMsgIs)); //false /// </example> public static bool IsZipCode(string Value, out string ErrMsgIs) { ErrMsgIs = ""; //435-050의 -를 뺌. int PosDash = Value.IndexOf('-'); if (PosDash == 3) { Value = Value.Substring(0, 3) + Value.Substring(4, 3); } if (!CValid.IsDigit(Value)) { ErrMsgIs = "우편번호가 숫자형식이 아닙니다."; return(false); } if (Value.Length != 6) { ErrMsgIs = "우편번호가 6자리가 아닙니다."; return(false); } return(true); }
public static bool IsValidEan(string Value, BarcodeEanType EanType, out string ErrMsgIs) { ErrMsgIs = ""; int FixedLength = 0; if (EanType == BarcodeEanType.Ean8) { FixedLength = 8; } else if (EanType == BarcodeEanType.Ean13) { FixedLength = 13; } else { ErrMsgIs = string.Format("잘못된 EanType:{0}입니다.", EanType); return(false); } if (Value.Length != FixedLength) { ErrMsgIs = string.Format("길이는 {0}자리만 허용됩니다.", FixedLength); return(false); } string ValueWithoutCheck = Value.Substring(0, FixedLength - 1); string CheckDigitRight = CValid.GetBarcodeCheckDigit(ValueWithoutCheck, out ErrMsgIs); if (string.IsNullOrEmpty(CheckDigitRight)) { return(false); } string CheckDigit = Value.Substring(FixedLength - 1, 1); if (CheckDigitRight != CheckDigit) { ErrMsgIs = string.Format("잘못된 검증번호:{0}", CheckDigit); return(false); } return(true); }
public static bool IsBarcode(string Value) { if (string.IsNullOrEmpty(Value)) { return(false); } string ValueExcept = Value.Substring(0, Value.Length - 1); string CheckDigit = Value[Value.Length - 1].ToString(); string ErrMsgIs; string CheckDigitRight = CValid.GetBarcodeCheckDigit(ValueExcept, out ErrMsgIs); if (string.IsNullOrEmpty(CheckDigitRight)) { return(false); } return(CheckDigit == CheckDigitRight.ToString()); }
/// <summary> /// 다음 규칙에 맞는 유효한 아이디인 지 확인함. /// 길이는 MinLength부터 MaxLength까지, 영어와 숫자만 가능, 첫자는 영어만 가능. /// </summary> /// <param name="Id"></param> /// <param name="MinLength"></param> /// <param name="MaxLength"></param> /// <param name="IsAllowHangul"></param> /// <param name="ErrMsgIs"></param> /// <returns></returns> public static bool IsId(string Id, int MinLength, int MaxLength, bool IsAllowHangulHanja, out string ErrMsgIs) { ErrMsgIs = ""; const string AlphaList = "abcdefghijklmnopqrstuvwxyz"; const string NumList = "1234567890"; const string AlphaNumList = AlphaList + NumList; if (string.IsNullOrEmpty(Id)) { ErrMsgIs = "아이디를 입력하지 않았습니다."; return(false); } int Len = CTwoByte.LenH(Id); if ((Len < MinLength) || (Len > MaxLength)) { ErrMsgIs = "아이디는 " + MinLength + " ~ " + MaxLength + "자 사이만 가능합니다"; return(false); } char FirstChar = Id[0]; if (IsAllowHangulHanja) { bool IsHangul = CValid.IsHangul(FirstChar); bool IsHanja = CValid.IsHanja(FirstChar); bool IsAlpha = (AlphaList.IndexOf(FirstChar) != -1); if (!IsHangul && !IsHanja && !IsAlpha) { ErrMsgIs = "아이디의 첫번째는 한글, 한자, 영문만 가능합니다."; return(false); } for (int i = 0, i2 = Id.Length; i < i2; i++) { char c = Id[i]; bool IsHangulCur = CValid.IsHangul(c); bool IsHanjaCur = CValid.IsHanja(c); bool IsAlphaOrNumCur = (AlphaNumList.IndexOf(c) != -1); if (!IsHangulCur && !IsHanja && !IsAlphaOrNumCur) { ErrMsgIs = "아이디는 한글, 한자, 영문, 숫자만 가능합니다."; return(false); } } } else { if (AlphaList.IndexOf(FirstChar) == -1) { ErrMsgIs = "아이디의 첫번째는 영문만 가능합니다"; return(false); } for (int i = 0, i2 = Id.Length; i < i2; i++) { char c = Id[i]; bool IsAlphaOrNumCur = (AlphaNumList.IndexOf(c) != -1); if (!IsAlphaOrNumCur) { ErrMsgIs = "아이디는 영문, 숫자만 가능합니다"; return(false); } } } switch (Id) { case "sys": case "system": case "admin": case "administrator": case "master": case "webmaster": case "developer": case "dev": case "helper": case "관리자": case "운영자": case "개발자": case "도우미": ErrMsgIs = Id + "는 시스템에서 사용되므로 허용되지 않는 아이디입니다."; return(false); } return(true); }
/// <summary> /// 주민등록번호가 올바른 형식인 지 확인함. /// </summary> /// <param name="Value">확인할 주민번호</param> /// <param name="ErrMsgIs">리턴값이 false일 때 설정되는 에러 메세지</param> /// <example> /// string ErrMsgIs; /// /// if (!IsJumin("710131-1121513", out ErrMsgIs)) /// { /// Console.WriteLine(ErrMsgIs); /// } /// else /// { /// Console.WriteLine("올바른 주민번호입니다"); /// } /// </example> public static bool IsJumin(string Value, bool IsCheckDigit, out string ErrMsgIs) { ErrMsgIs = ""; int PosDash = Value.IndexOf('-'); if (PosDash != -1) { Value = Value.Substring(0, PosDash) + Value.Substring(PosDash + 1); } if (!CValid.IsDigit(Value)) { ErrMsgIs = "주민등록번호는 숫자만 가능합니다."; return(false); } if (Value.Length != 13) { ErrMsgIs = "주민등록번호는 13자리여야만 합니다."; return(false); } string DateCheck = Value.Substring(0, 2) + "-" + Value.Substring(2, 2) + "-" + Value.Substring(4, 2); if (!CValid.IsDateTime(DateCheck)) { ErrMsgIs = "주민등록번호의 생년월일 부분은 날짜 형식이어야만 합니다."; return(false); } int Sex = Convert.ToInt32(Value.Substring(6, 1)); if ((Sex < 1) || (Sex > 4)) { ErrMsgIs = "주민등록번호의 두번째 부분의 첫번째 자리는 성별을" + " 나타내므로 1, 2, 3, 4만 가능합니다."; return(false); } if (IsCheckDigit) { /* * 다음과 같은 방법으로 주민 번호의 마지막 번호가 만들어짐. * 1. 각 문자열에 2부터 1씩 증가시켜 9까지 순서대로 더함. * 2. 이 값들을 모두 더함. * 3. 모두 더한 값에서 11로 나눈 나머지 값을 구함. * 4. 11에서 그 나머지 값을 뺀 뒤, 그것을 10으로 나눈 나머지 값을 구함. */ int SumOfNum = (Convert.ToInt32(Convert.ToString(Value[0])) * 2) + (Convert.ToInt32(Convert.ToString(Value[1])) * 3) + (Convert.ToInt32(Convert.ToString(Value[2])) * 4) + (Convert.ToInt32(Convert.ToString(Value[3])) * 5) + (Convert.ToInt32(Convert.ToString(Value[4])) * 6) + (Convert.ToInt32(Convert.ToString(Value[5])) * 7) + (Convert.ToInt32(Convert.ToString(Value[6])) * 8) + (Convert.ToInt32(Convert.ToString(Value[7])) * 9) + (Convert.ToInt32(Convert.ToString(Value[8])) * 2) + (Convert.ToInt32(Convert.ToString(Value[9])) * 3) + (Convert.ToInt32(Convert.ToString(Value[10])) * 4) + (Convert.ToInt32(Convert.ToString(Value[11])) * 5); int CheckDigit = (11 - (SumOfNum % 11)) % 10; if (Convert.ToInt32(Value.Substring(12, 1)) != CheckDigit) { ErrMsgIs = "올바른 형식의 주민등록번호가 아닙니다."; return(false); } } return(true); }
/// <summary> /// 사업자번호가 올바른 형식인 지 확인함. /// </summary> /// <param name="Value">확인할 사업자번호</param> /// <param name="ErrMsgIs">리턴값이 false일 때 설정되는 에러 메세지</param> /// <example> /// string ErrMsgIs; /// /// Console.WriteLine(IsSaupNo("1168135609", out ErrMsgIs)); //마니텔레콤 /// Console.WriteLine(IsSaupNo("2168110233", out ErrMsgIs)); //(주)탐경 /// Console.WriteLine(IsSaupNo("216-81-10233", out ErrMsgIs)); //(주)탐경 /// Console.WriteLine(IsSaupNo("2168110230", out ErrMsgIs)); //false /// </example> public static bool IsSaupNo(string Value, out string ErrMsgIs) { ErrMsgIs = ""; //-를 삭제함. int PosDash = Value.IndexOf('-'); if (PosDash != -1) { StringBuilder sb = new StringBuilder(Value); Value = sb.Replace("-", "").ToString(); } if (!CValid.IsDigit(Value)) { ErrMsgIs = "사업자등록번호가 숫자 형식이 아닙니다."; return(false); } if (Value.Length != 10) { ErrMsgIs = "사업자등록번호가 10자리가 아닙니다."; return(false); } /* * 다음과 같은 방법으로 사업자 번호의 마지막 번호가 만들어짐. * 1. 9번째 자리에 5를 곱함. 이때 한자리 수가 나오면 끝에 0을 붙임. * 2. 다음 a, b, c를 모두 더한 값을 구함. * a : 1의 결과에서 1, 4, 7번째의 숫자를 더함. * b : 2, 5, 8번째의 숫자를 더하고 3을 곱함. * c : 3, 6번째의 숫자를 더하고 7을 곱함. * 3. 구해진 값의 2번째 자리의 숫자를 구함. * 4. 9에서 구해진 값을 뺀 후, 10을 나눈 나머지 값을 구함. */ int[] aNum = new int[10]; for (int i = 0; i < 10; i++) { aNum[i] = Convert.ToInt32(Value.Substring(i, 1)); } string s = (aNum[8] * 5).ToString(); if (s.Length == 1) { s += s + "0"; } s = ( (Convert.ToInt32(s) + aNum[0] + aNum[3] + aNum[6]) + ((aNum[1] + aNum[4] + aNum[7]) * 3) + ((aNum[2] + aNum[5]) * 7) ).ToString(); s = s.Substring(1, 1); int CheckDigit = (9 - Convert.ToInt32(s)) % 10; if (CheckDigit != aNum[9]) { ErrMsgIs = "올바른 사업자등록번호가 아닙니다."; return(false); } return(true); }
/// <summary> /// 주민번호의 체크디지트를 생성함. /// </summary> /// <param name="YYMMDD">YYMMDD 형식의 년월일</param> /// <param name="SixDigit">두번째 부분의 여섯자리</param> /// <param name="ErrMsgIs">리턴값이 ""일 때 설정되는 에러 메세지</param> /// <example> /// string ErrMsgIs; /// /// Console.WriteLine(GenerateJuminNo("710131", "999999", out ErrMsgIs)); //"" /// Console.WriteLine(GenerateJuminNo("710131", "abcdef", out ErrMsgIs)); //"" /// Console.WriteLine(GenerateJuminNo("710131", "111111", out ErrMsgIs)); //0 /// Console.WriteLine(GenerateJuminNo("710131", "112151", out ErrMsgIs)); //3 /// </example> public static string GenerateJuminNo(string YYMMDD, string SixDigit, out string ErrMsgIs) { ErrMsgIs = ""; string Value = YYMMDD + SixDigit; if (!CValid.IsDigit(Value)) { ErrMsgIs = "주민등록번호는 숫자만 가능합니다."; return(""); } if (Value.Length != 12) { ErrMsgIs = "마지막 숫자를 제외한 주민등록번호는 12자리여야만 합니다."; return(""); } string DateCheck = Value.Substring(0, 2) + "-" + Value.Substring(2, 2) + "-" + Value.Substring(4, 2); if (!CValid.IsDateTime(DateCheck)) { ErrMsgIs = "주민등록번호의 생년월일 부분은 날짜 형식이어야만 합니다."; return(""); } int Sex = Convert.ToInt32(Value.Substring(6, 1)); if ((Sex < 1) || (Sex > 4)) { ErrMsgIs = "주민등록번호의 두번째 부분의 첫번째 자리는 성별을" + " 나타내므로 1, 2, 3, 4만 가능합니다."; return(""); } /* * 다음과 같은 방법으로 주민 번호의 마지막 번호가 만들어짐. * 1. 각 문자열에 2부터 1씩 증가시켜 9까지 순서대로 더함. * 2. 이 값들을 모두 더함. * 3. 모두 더한 값에서 11로 나눈 나머지 값을 구함. * 4. 11에서 그 나머지 값을 뺀 뒤, 그것을 10으로 나눈 나머지 값을 구함. */ int SumOfNum = (Convert.ToInt32(Convert.ToString(Value[0])) * 2) + (Convert.ToInt32(Convert.ToString(Value[1])) * 3) + (Convert.ToInt32(Convert.ToString(Value[2])) * 4) + (Convert.ToInt32(Convert.ToString(Value[3])) * 5) + (Convert.ToInt32(Convert.ToString(Value[4])) * 6) + (Convert.ToInt32(Convert.ToString(Value[5])) * 7) + (Convert.ToInt32(Convert.ToString(Value[6])) * 8) + (Convert.ToInt32(Convert.ToString(Value[7])) * 9) + (Convert.ToInt32(Convert.ToString(Value[8])) * 2) + (Convert.ToInt32(Convert.ToString(Value[9])) * 3) + (Convert.ToInt32(Convert.ToString(Value[10])) * 4) + (Convert.ToInt32(Convert.ToString(Value[11])) * 5); int CheckDigit = (11 - (SumOfNum % 11)) % 10; return(Value + CheckDigit); }