using System;
namespace Sp.Common
{
public class ValidatorHelper
{
/// <summary>
/// Dirección correspondiente al número en la tarjeta de identificación
/// </ summary>
// enum IDAddress
// {
// Beijing = 11, Tianjin = 12, Hebei = 13, Shanxi = 14, Mongolia Interior = 15, Liaoning = 21, Jilin = 22, Heilongjiang = 23, Shanghai = 31, Jiangsu = 32, Zhejiang = 33,
// Anhui = 34, Fujian = 35, Jiangxi = 36, Shandong = 37, Henan = 41, Hubei = 42, Hunan = 43, Guangdong = 44, Guangxi = 45, Hainan = 46, Chongqing = 50, Sichuan = 51,
// Guizhou = 52, Yunnan = 53, Tibet = 54, Shaanxi = 61, Gansu = 62, Qinghai = 63, Ningxia = 64, Xinjiang = 65, Taiwán = 71, Hong Kong = 81, Macao = 82, en el extranjero = 91
// }
/// <summary>
/// Verifique un número de tarjeta de identificación de generación (15 dígitos)
/// [número de 15 dígitos; coincida con la dirección de la provincia correspondiente; el cumpleaños puede coincidir correctamente]
/// </ summary>
/// <param name = "input"> cadena a verificar </ param>
/// <returns> si coincide con </
return > public static bool IsIDCard15 ( input de cadena )
{
// verifica si se puede convertir a 15 dígitos Entero
largo l = 0 ;
if (! Long . TryParse (input, out l) || l.ToString (). Length! = 15 )
{
return false ;
}
// Verifique que las provincias coincidan
// 1 ~ 6 dígitos son códigos de área, 1, 2 dígitos son códigos de gobiernos provinciales, 3, 4 dígitos son códigos de prefectura y gobiernos municipales, 5. El número de 6 dígitos es el código del gobierno del condado y distrito.
dirección de cadena = " 11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51, 52,53,54,61,62,63,64,65,71,81,82,91, " ;
if (! Address.Contains (input.Remove ( 2 ) + " , " ))
{
return false ;
}
// Verifique que el cumpleaños coincida con la
cadena birthdate = input.Substring ( 6 , 6 ) .Insert (4 , " / " ) .Insert ( 2 , " / " );
DateTime dt;
if (! DateTime. TryParse (birthdate , out dt))
{
return false ;
}
return true ;
}
/// <summary>
/// Verifique el número de ID de segunda generación (18 dígitos, GB11643-1999 estándar)
/// [La longitud es de 18 dígitos; los primeros 17 dígitos son números, y el último dígito (código de verificación) puede ser x mayúscula y minúscula; coincida con la dirección de provincia correspondiente; El cumpleaños puede coincidir correctamente; el código de verificación puede coincidir correctamente]
/// </ summary>
/// <param name = "input"> cadena a verificar </ param>
/// <returns> ¿ Coincide con </
return > public static bool IsIDCard18 ( string input)
{
// Verifique que se pueda convertir al entero correcto
long l = 0 ;
if (! long . TryParse (input.Remove ( 17 ), out l) || l.ToString (). Longitud! = 17 ||! largo . TryParse (input.Replace ( ' x ' , ' 0 ' ) .Replace ( ' X ' , ' 0 ' ), out l))
{
return false ;
}
// Verifique que las provincias coincidan
// 1 ~ 6 dígitos son códigos de área, de los cuales 1, 2 dígitos son códigos de gobiernos provinciales, 3, 4 dígitos son códigos de prefectura y gobiernos municipales, 5 , 6 dígitos para códigos gubernamentales del condado y distrito.
dirección de cadena = " 11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51, 52,53,54,61,62,63,64,65,71,81,82,91, " ;
if (! Address.Contains (input.Remove ( 2 ) + " , " ))
{
return false ;
}
// Verifique que el cumpleaños coincida con la
cadena birthdate = input.Substring ( 6 , 8) .Insert ( 6 , " / " ) .Insert ( 4 , " / " );
DateTime dt;
if (! DateTime. TryParse (fecha de nacimiento, out dt))
{
return false ;
}
// Verificar verificación de código
// escuela Código de verificación:
// (1) Fórmula de suma ponderada de código de cuerpo de 17 dígitos
// S = Suma (Ai * Wi), i = 0, ..., 16, primera suma de los pesos de los primeros 17 dígitos
/ / Ai: indica el valor digital del número de identificación en
la posición i-ésima // Wi: indica el factor de ponderación en la posición i-ésima
//Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
// (2) Calcule el mod
// Y = mod (S, 11)
// (3) Obtenga el código de verificación correspondiente mediante el mod
/ / Y: 0 1 2 3 4 5 6 7 8 9 10
// Código de verificación: 1 0 X 9 8 7 6 5 4 3 2
string [] arrVarifyCode = ( " 1,0, x, 9,8,7, 6,5,4,3,2 " ) .split ( ' ' );
cadena [] la Wi = ( " 7,9,10,5,8,4,2,1,6,3,7,9, 10,5,8,4,2 " ) .Split ( ' , ' );
char [] Ai = input.Remove ( 17) .ToCharArray ();
int suma = 0 ;
para ( int i = 0 ; i < 17 ; i ++ )
{
sum + = int .Parse (Wi [i]) * int .Parse (Ai [i] .ToString ());
}
int y = - 1 ;
Math.DivRem (sum, 11 , out y);
if (arrVarifyCode [y]! = input.Substring ( 17 , 1 ) .ToLower ())
{
return false;
}
return true ;
}
/// <summary>
/// Verificar el número de identificación (no distingue entre los números de identificación de primera y segunda generación)
/// </ summary>
/// <param name = "input"> Verificación pendiente String </ param>
/// <returns> ¿ Coincide con </
return > public static bool IsIDCard ( string input)
{
if (input.Length == 18 )
return IsIDCard18 (input);
si if (input.Length == 15 )
volverIsIDCard15 (entrada);
de lo contrario
devuelve falso ;
}
}
}