身份证格式验证(含15位转换到18位)C#

转换

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 1; i < 10; i++)
            {
                Console.Write("{0}:    ", i);
                for (int k = 1; k <= i; k++)
                {
                    Console.Write("{0}" + "  ", i * k);
                }
              
              
                Console.WriteLine();
            }
            string str = "620102197811196218";
            CheckCid t = new CheckCid();
            string str1 = t.CheckCidInfo(str);
            Console.Write(str1);
        }

        /// <summary>
        /// 15 to 19
        /// </summary>
        public class IDCard
        {
            // wi =2(n-1)(mod 11)
            int[] wi = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };
            // verify digit
            int[] vi = new int[] { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };
            private int[] ai = new int[18];
            public IDCard()
            {
            }
            //verify
            public string Verify(string idcard)
            {
                string strCard = "";
                if (idcard.Length == 15)
                {
                    strCard = uptoeighteen(idcard);
                }
                if (idcard.Length == 18)
                {
                    strCard = idcard;
                }
                //string verify = idcard.Substring(17, 18);
                //if (verify.Equals(getVerify(idcard))) {
                //return true;
                //}
                return strCard;
            }
            //get verify
            public string getVerify(string eightcardid)
            {
                int remaining = 0;
                if (eightcardid.Length == 18)
                {
                    eightcardid = eightcardid.Substring(0, 17);
                }
                if (eightcardid.Length == 17)
                {
                    int sum = 0;
                    for (int i = 0; i < 17; i++)
                    {
                        string k = eightcardid.Substring(i, 1);
                        ai[i] = int.Parse(k);
                    }
                    for (int i = 0; i < 17; i++)
                    {
                        sum = sum + wi[i] * ai[i];
                    }
                    remaining = sum % 11;
                }
                return remaining == 2 ? "X" : (vi[remaining]).ToString();
            }
            //15 update to 18
            public string uptoeighteen(string fifteencardid)
            {
                string eightcardid = fifteencardid.Substring(0, 6);
                eightcardid = eightcardid + "19";
                eightcardid = eightcardid + fifteencardid.Substring(6, 9);
                eightcardid = eightcardid + getVerify(eightcardid);
                return eightcardid;
            }
        }
        /// <summary>
        /// 检测
        /// </summary>
        public class CheckCid
        {
        public string CheckCidInfo(string cid)
        {
            string[] aCity = new string[]{null,null,null,null,null,null,null,null,null,null,null,"北京","天津","河北","山西","内蒙古",null,null,null,null,null,"辽宁","吉林","黑龙江",null,null,null,null,null,null,null,"上海","江苏","浙江","安微","福建","江西","山东",null,null,null,"河南","湖北","湖南","广东","广西","海南",null,null,null,"重庆","四川","贵州","云南","西藏",null,null,null,null,null,null,"陕西","甘肃","青海","宁夏","新疆",null,null,null,null,null,"台湾",null,null,null,null,null,null,null,null,null,"香港","澳门",null,null,null,null,null,null,null,null,"国外"};
            double iSum=0;
            //string info="";
            System.Text.RegularExpressions.Regex rg = new System.Text.RegularExpressions.Regex(@"^\d{17}(\d|x)$");
            System.Text.RegularExpressions.Match mc = rg.Match(cid);
            if(!mc.Success)
            {
            return "";
            }
            cid = cid.ToLower();
            cid = cid.Replace("x","a");
            if(aCity[int.Parse(cid.Substring(0,2))]==null)
            {
            return "非法地区";
            }
            try
            {
            DateTime.Parse(cid.Substring(6,4)+"-"+cid.Substring(10,2)+"-"+cid.Substring(12,2));
            }
            catch
            {
            return "非法生日";
            }
            for(int i=17;i>=0;i--)
            {
            iSum +=(System.Math.Pow(2,i)%11)*int.Parse(cid[17-i].ToString(),System.Globalization.NumberStyles.HexNumber);

            }
            if(iSum%11!=1)
            return("非法证号");

            return(aCity[int.Parse(cid.Substring(0,2))]+","+cid.Substring(6,4)+"-"+cid.Substring(10,2)+"-"+cid.Substring(12,2)+","+(int.Parse(cid.Substring(16,1))%2==1?"男":"女"));

        }
        }
    }
}
 

 

时间: 2024-12-21 19:35:43

身份证格式验证(含15位转换到18位)C#的相关文章

MaxCompute UDF系列之身份证校验及15位身份证号码转换成18位

为了验证一些老证件上的身份证号码到底是不是本人,今天为大家提供一个15位身份证号码转换成18位的MaxCompute的UDF,下载地址见附件. 效果如下: MaxCompute UDF代码如下: /*** * 身份证号码构成:6位地址编码+8位生日+3位顺序码+1位校验码 * 验证15位,18位证件号码是否有效:15位号码将直接转为18位: * 校验身份证号码除了校验位是否为数值,校验省份.出生日期 * 校验位不正确的会被正确的替代 * 出生日期逻辑有效性,即是否1900年前出生,是否当前日期后

jsp身份证号码验证代码(15,18位)

<%@ page contenttype="text/html; charset=gb2312" language="java" import="java.sql.*" errorpage="" %> <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml

将身份证从15位升级为18位的函数

 '将身份证从15位升级为18位的函数    Function GetNewIDCard(ByVal IDCard As String) As String        Dim i, S As Integer        Dim Wi() As String = Split("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1", ",")        Dim Wf() As String = Split("1,0,X,9,8

PHP实现身份证号正则验证(兼容15,18位)

  最近复习了正则表达式的使用,手痒痒就做了一份验证正则,身份证号验证(兼容15,18位) ,在注册验证的时候可以用上.   01 //比较菜鸟 第一次分享代码   02 //身份证号验证 03     protected function checkIdCard(){ 04         if(empty($_POST['idcard'])){ 05             return false; 06         } 07         $idcard = $_POST['idc

身份证号码的匹配的js代码&lt;15位/18位&gt;

身份证号码可以是15位或者是18位,其中最后一位可以是X.其它全是数字,正则如下:  代码如下 复制代码  /^(d{14}|d{17})(d|[xX])$/ 开头是14位或者17位数字,结尾可以是数字或者是x或者是X. 测试代码如下:  代码如下 复制代码  <script type="text/javascript">  function testReg(reg,str){   return reg.test(str);  }  var reg = /^(d{14}|d

vbscript和javascript版的15位, 18位的身份证号码的验证函数.以及根据身份证取省份,生日,性别_vbs

工作中需要用到身份证验证,还要支持检查15位和18位. 我一时手懒,问同事有没有现成的函数可用,同事google了一下,扔给我一个 asp-vbscript版本的函数.可我这边是客户端javascript呀,于是用改 vbs-->js 改完发现蛮好用的,同时发现 vbscript真的很啰嗦,居然写了50多行,我改成js 只用了11行. 当然,我并完全是指vbscript啰嗦,那个写这段vbs代码的无名氏也是个唐僧性格..... 先放出 vbscript代码,    复制代码 代码如下: <sc

做一个牛XX的身份证号验证类(支持15位和18位)

原文:做一个牛XX的身份证号验证类(支持15位和18位) #region 是否合法的中国身份证号码 protected bool IsChineseID() { if (str.Length == 15) str = CidUpdate(str); if (str.Length == 18) { string strResult = CheckCidInfo(str); if (strResult == "非法地区" || strResult == "非法生日" |

15/18位身份证号码验证的正则表达式总结(详细版)

前言 开发过程中,常常需要对一些输入信息进行有效性验证,使用正则表达式进行校验是最简单.效率最高的方式了,下面就来看看15/18位身份证号码验证的正则表达式吧. 介绍 xxxxxx yyyy MM dd 375 0     十八位 xxxxxx    yy MM dd   75 0     十五位 地区: [1-9]\d{5} 年的前两位: (18|19|([23]\d))            1800-2399 年的后两位: \d{2} 月份: ((0[1-9])|(10|11|12)) 天

java,javascript对18位身份证格式的验证算法

参考资料 1 java实现的18位身份证格式验证算法 http://fanqiang.chinaunix.net/program/java/2006-06-22/4639.shtml 原码中有少许错误,我已经调整过来了 2 身份证效验规则,经典 http://since2006.com/blog/176 公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. 1.地址码 表示编码对象常住户口所