顯示具有 驗證 標籤的文章。 顯示所有文章
顯示具有 驗證 標籤的文章。 顯示所有文章

2012年9月20日 星期四

[C#]統一編號驗證 Uniform No. Validator

碼數01234567
統一編號00238778
運算x1x2x1x2x1x2x4x1
新值10026814288每個值的十位數與個位數加總直到只剩個位數
新值2002685108
新值30+0+2+6+8+5+1+8=30每個數值加總後可整除10即代表統編正確

protected bool CheckUniformNo(string strCardno)
{
    if (strCardno.Trim().Length < 8)
    {
        return false;
    }
    else
    {
        int[] intTmpVal = new int[6];
        int intTmpSum = 0;
        for (int i = 0; i < 6; i++)
        {
            //位置在奇數位置的*2,偶數位置*1,位置計算從0開始
            if (i % 2 == 1)
                intTmpVal[i] = overTen(int.Parse(strCardno[i].ToString()) * 2);
            else
                intTmpVal[i] = overTen(int.Parse(strCardno[i].ToString()));

            intTmpSum += intTmpVal[i];
        }
        intTmpSum += overTen(int.Parse(strCardno[6].ToString()) * 4); //第6碼*4
        intTmpSum += overTen(int.Parse(strCardno[7].ToString())); //第7碼*1

        if (intTmpSum % 10 != 0) //除以10後餘0表示正確,反之則錯誤
            return false;
    }
    return true;
}
private int overTen(int intVal) //超過10則十位數與個位數相加,直到相加後小於10
{
    if (intVal >= 10)
        intVal = overTen((intVal / 10) + (intVal % 10));
    return intVal;
}

2012年9月19日 星期三

[C#] 驗證信用卡卡號 Credit Card No. Validator

碼數0123456789101112131415
信用卡卡號3456789012345675
運算x2x1x2x1x2x1x2x1x2x1x2x1x2x1x2x1
新值1641061481802264106145
=>把每個[新值1]的個位數與十位數加總,產生[新值2]
新值26+4+1+6+5+8+9+0+2+2+6+4+1+6+5+5=70=>加總每個[新值2]後若可整除10即代表卡號正確

protected bool CheckCreditCardNo(string strCardno)
{
    if (strCardno.Trim().Length < 16)
    {
        return false;
    }
    else
    {
        int[] intTmpVal = new int[16];
        int intTmpSum = 0;
        for (int i = 0; i < 16; i++)
        {
            //位置在奇數位置的*1,偶數位置*2,位置計算從0開始
            if (i % 2 == 1)
                intTmpVal[i] = int.Parse(strCardno[i].ToString());
            else
                intTmpVal[i] = int.Parse(strCardno[i].ToString()) * 2;

            //以上處理後若結果大於10的將其個位數+十位數
            if (intTmpVal[i] >= 10)
                intTmpVal[i] = (intTmpVal[i] / 10) + (intTmpVal[i] % 10);

            //將所得的所有結果加總
            intTmpSum += intTmpVal[i];
        }
        if (intTmpSum % 10 != 0) //除以10後餘0表示正確,反之則錯誤
            return false;
    }
    return true;
}

2012年9月12日 星期三

[C#]日期驗證 Date Validator

1.日期驗證(for 西元年)
public static bool IsDate(string anyString)
{
    if (anyString.Length != 8) //這是在沒有任何符號(/.-)的狀況下
        return false;
    else
    {
        //在沒有符號的狀況下補上日期分隔符號
        anyString = anyString.Substring(0, 4) + "/" + anyString.Substring(4, 2) + "/" + anyString.Substring(6, 2);
        //====以上若已經有在輸入時即限制輸入格式可不需要====
        try
        {
            DateTime dt;
            dt = DateTime.Parse(anyString);
            return true;
        }
        catch
        {
            return false;
        }
    }
}
註:如果是要判斷民國年就將原本的民國年轉為數值後加上19110000再判斷即可

2.日期區間判斷
DateTime t1 = (DateTime.Parse((int.Parse(d1.Text.Substring(0, d1.Text.Length - 4)) + 1911) + "-" + d1.Text.Substring(d1.Text.Length - 4, 2) + "-" + d1.Text.Substring(d1.Text.Length - 2, 2)));
DateTime t2 = (DateTime.Parse((int.Parse(d2.Text.Substring(0, d2.Text.Length - 4)) + 1911) + "-" + d2.Text.Substring(d2.Text.Length - 4, 2) + "-" + d2.Text.Substring(d2.Text.Length - 2, 2)));

TimeSpan ts = t2 - t1;

//驗證日期區間起始輸入是否正確,後面日期不可小於前面日期
if (ts.Days < 0)
{
    MessageBox.Show("ERROR:請輸入正確日期區間,查詢起始日期必須小於結束日期");
    return false;
}

//天數限制
if (ts.Days >= 31)
{
    messageShow.Text = "ERROR:日期區間最多不可超過31日";
    return false;
}
else
{
    return true;
}