Luhn 알고리즘 (모드 10 알고리즘) 소개 및 C \ # 코드 IMEI 검사

2984 단어 c#
1. Luhn 알고리즘 (모 10 알고리즘)ISO/IEC 7812-1:2017 파일 을 보면 luhn 알고리즘 에 대한 설명 을 볼 수 있 습 니 다. 다음 과 같 습 니 다.
알고리즘 은 주로 세 단계 로 나 뉜 다. 첫 번 째 단계: 오른쪽 첫 번 째 (최저 위치) 부터 격 리 곱 하기 2;두 번 째 단계: 첫 번 째 단계 에서 얻 은 모든 숫자 를 원래 의 숫자 에 넣 고 9*2=18, 1+8.세 번 째 단계: 0 으로 끝나 고 두 번 째 단계 에서 얻 은 수의 합 보다 큰 최소 정수 로 두 번 째 단계 에서 얻 은 합 을 빼 면 검증 위 치 를 얻 을 수 있 습 니 다. 70-67=3,3 두 번 째 단계 의 모든 숫자 와 0 로 끝나 면 검증 은 0 입 니 다.
2. IMEI 검사
IMEI 코드 는 GSM (Global System for Mobile Communications, 글로벌 이동 통신 협회) 이 일괄 배분 해 BABT (British approvals Board of Telecommunications, 영국 통신 인증 관리 위원회) 가 심사 할 수 있 도록 권한 을 부여 한다. 30、40、50 에서 IMEI 검증 은 TS.06 IMEI Allocation and Approval Process 을 통 해 계산 해 야 한다 고 규정 하고 다음 그림 과 같다.
3. C \ # 코드
public class LuhnCalcCheckDigit
{

    /// 
    ///   Luhn       ,  IMEI、    
    /// 
    ///          
    /// 
    public static int CalcLuhnCheckDigit(string imei)
    {
        int checkDigit = 0;
        int addValue = 0;
        for (int i = 0; i < imei.Length; i++)
        {
            if (i % 2 == 0)
            {
                int result = Convert.ToInt32(imei[imei.Length - i - 1].ToString()) * 2;
                if (result > 9)
                {
                    addValue += (result - 9);
                }
                else
                {
                    addValue += result;
                }
            }
            else
            {
                addValue += Convert.ToInt32(imei[imei.Length - i - 1].ToString());
            }
        }

        if (addValue % 10 == 0)
        {
            checkDigit = 0;
        }
        else
        {
            checkDigit = 10 - addValue % 10;
        }
        return checkDigit;
    }


    /// 
    ///   Luhn          ,  IMEI、    
    /// 
    ///         
    /// 
    public static bool VerifyLuhn(string imei)
    {
        int checkDigit = 0;
        int addValue = 0;
        for (int i = 1; i < imei.Length; i++)
        {
            if (i % 2 == 1)
            {
                int result = Convert.ToInt32(imei[imei.Length - i - 1].ToString()) * 2;
                if (result > 9)
                {
                    addValue += (result - 9);
                }
                else
                {
                    addValue += result;
                }
            }
            else
            {
                addValue += Convert.ToInt32(imei[imei.Length - i - 1].ToString());
            }
        }
        if (addValue % 10 == 0)
        {
            checkDigit = 0;
        }
        else
        {
            checkDigit = 10 - addValue % 10;
        }
        return (checkDigit - Convert.ToInt32(imei[imei.Length - 1].ToString())) == 0;
    }

}

4. 참고 자료 링크
TS.06 IMEI Allocation and Approval Process
ISO/IEC 7812-1:2017

좋은 웹페이지 즐겨찾기