1,先将15位的号码变成18位
private string per15To18(string perIDSrc) 
        
{
            
int iS = 0;
            
//加权因子常数 
            int[] iW=new int[]{7910584216379105842};
            
//校验码常数 
            string LastCode="10X98765432"
            
//新身份证号 
            string perIDNew; 
 
            System.Text.RegularExpressions.Regex rg 
= new System.Text.RegularExpressions.Regex(@"^\d{15}$");
            System.Text.RegularExpressions.Match mc 
= rg.Match(perIDSrc);
            
if(!mc.Success)
           
{
                MessageBox.Show(
"位数不正确!");
                
return "";
            }
   
            perIDNew
=perIDSrc.Substring(0,6);
            
//填在第6位及第7位上填上‘1’,‘9’两个数字 
            perIDNew += "19"
 
            perIDNew 
+= perIDSrc.Substring(6,9); 
 
            
//进行加权求和 
            forint i=0; i<17; i++
            

                iS 
+= int.Parse(perIDNew.Substring(i,1)) * iW[i];
            }
 
     
            
//取模运算,得到模值 
            int iY = iS%11
            
//从LastCode中取得以模为索引号的值,加到身份证的最后一位,即为新身份证号。 
            perIDNew += LastCode.Substring(iY,1); 
            MessageBox.Show(perIDNew);
            
return perIDNew;
        }
 

2,校验号码
private 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|x)$");
            System.Text.RegularExpressions.Match mc 
= rg.Match(cid);
            
if(!mc.Success)
            
{
                MessageBox.Show(
"位数不正确!");
                
return "";
            }
   
            cid 
= cid.ToLower();
            cid 
= cid.Replace("x","a");
            
if(aCity[int.Parse(cid.Substring(0,2))]==null)
            
{
                MessageBox.Show(
"非法地区");
                
return "非法地区";
            }

            
try
            
{
                DateTime.Parse(cid.Substring(
6,4)+"-"+cid.Substring(10,2)+"-"+cid.Substring(12,2));
            }

            
catch
            
{
                MessageBox.Show(
"非法生日");
                
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)
            
{
                MessageBox.Show(
"非法证号");
                
return("非法证号");
            }

            MessageBox.Show((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?"":"")));
            
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?"":""));
  
//            return null;
}

3,完成