gdjlc

培养良好的习惯,每天一点一滴的进步,终将会有收获。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1、身份证号加密
规则如下:
出生月份+1,如果超出12则变01;倒数第2、3位+1,如果超出99则变01,最后还要重新计算最后一位的校验码,计算规则如下:
(1)身份证号码前17位数分别乘以不同的系数并相加 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
(2)用第1步的结果除以11,余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字中,分别对应身份证的最后一位1 0 X 9 8 7 6 5 4 3 2
       
例:110101198808083034 加密后为 110101198808083034

/// <summary>
/// 证件加密:出生月份+1,如果超出12则变01;倒数第2、3位+1,如果超出99则变01,重计最后一位校验码
/// </summary>
/// <param name="idno"></param>
/// <returns></returns>
public static string GetEncryptIdNo(string idno)
{
    string tempIdno = "", newIdno = "";
    if (idno.Length != 18)
        return idno;
    string head = idno.Substring(0, 10);
    string month = AddNumerOne(idno.Substring(10, 2), 12);
    string end = idno.Substring(12, 3) + AddNumerOne(idno.Substring(15, 2), 99);
    tempIdno = head + month + end;

    int[] Wi = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
    string[] arrVerifyCode = { "1", "0", "x", "9", "8", "7", "6", "5", "4", "3", "2" };
    int ret = 0;
    for (int i = 0; i < 17; i++)
        ret += int.Parse(tempIdno.Substring(i, 1)) * Wi[i];

    newIdno = tempIdno.Substring(0, 17) + arrVerifyCode[ret %= 11];
    return newIdno;
}

/// <summary>
/// 对传进来的数加1,如果超过则减去参数v
/// </summary>
/// <param name="month"></param>
/// <param name="v"></param>
/// <returns></returns>
private static string AddNumerOne(string s, int v)
{
    int result = Convert.ToInt32(s) + 1;
    if (result > v)
        result = result - v;
    return result.ToString().PadLeft(2, '0');
}

2、姓名的姓加密
规则如下:先获取系统所有的姓集合,保存为字典,根据传进来的参数姓,查找字典中对应的KEY值,替换为下一个KEY的姓,如果参数姓为最后一个,则替换为第一个KEY的姓。

下面例子,如传入姓名“何必”,则结果为“董必”。

/// <summary>
/// 姓加密:根据传进来的参数姓,查找字典中对应的KEY值,替换为下一个KEY的姓,如果参数姓为最后一个,则替换为第一个KEY的姓,找不到则默认第一个KEY的姓
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static string GetEncryptName(string name)
        {
            string result = "";
            if (name.Length == 0)
                return "";

            Dictionary<int, string> dict = new Dictionary<int, string>()
            {
               {1,"叶"},{2,"魏"},{3,"洪"},{4,"孙"},{5,"何"},{6,"董"},{7,"饶"},{8,"邵"},{9,"赖"},{10,"夏"},
               {11,"肖"},{12,"付"},{13,"徐"},{14,"范"},{15,"孟"},{16,"柯"},{17,"任"},{18,"欧"},{19,"温"},{20,"邓"}
        //太多了。。这里省略不写
            };
            result = name.Substring(0, 1);
            int key = dict.FirstOrDefault(d => d.Value == result).Key + 1;
            if (key > dict.Keys.Count)
                key = key - dict.Keys.Count;

            result = dict.FirstOrDefault(d => d.Key == key).Value;
            return result + name.Substring(1);
        }




posted on 2013-08-15 11:31  gdjlc  阅读(3950)  评论(0编辑  收藏  举报