컨테이너 번호 확인을 해야 하는데 찾아 나오는 C# 소스 코드가 에러가 있어서 수정해보았다. 방식은 다음(링크)을 참조했다.

 

        private bool Cntrnumb_Chk(string conNumber)
        {
        	//11자리 그대로 들어와야 한다.
            if (conNumber.Equals(""))
                return false;
            int nChk = 0;
            int nBcd = 0;
            int nHap = 0;
            string sChk = "";
            conNumber = conNumber.Trim();
            for (int i = 0; i < conNumber.Length - 1; i++)
            {
                nBcd *= 2;
                if (nBcd == 0)
                    nBcd = 1;
                sChk = conNumber.Substring(i, 1);
                switch (sChk)
                {
                    case "A": nChk = 10; break;
                    case "B": nChk = 12; break;
                    case "C": nChk = 13; break;
                    case "D": nChk = 14; break;
                    case "E": nChk = 15; break;
                    case "F": nChk = 16; break;
                    case "G": nChk = 17; break;
                    case "H": nChk = 18; break;
                    case "I": nChk = 19; break;
                    case "J": nChk = 20; break;
                    case "K": nChk = 21; break;
                    case "L": nChk = 23; break;
                    case "M": nChk = 24; break;
                    case "N": nChk = 25; break;
                    case "O": nChk = 26; break;
                    case "P": nChk = 27; break;
                    case "Q": nChk = 28; break;
                    case "R": nChk = 29; break;
                    case "S": nChk = 30; break;
                    case "T": nChk = 31; break;
                    case "U": nChk = 32; break;
                    case "V": nChk = 34; break;
                    case "W": nChk = 35; break;
                    case "X": nChk = 36; break;
                    case "Y": nChk = 37; break;
                    case "Z": nChk = 38; break;
                    case "1": nChk = 1; break;
                    case "2": nChk = 2; break;
                    case "3": nChk = 3; break;
                    case "4": nChk = 4; break;
                    case "5": nChk = 5; break;
                    case "6": nChk = 6; break;
                    case "7": nChk = 7; break;
                    case "8": nChk = 8; break;
                    case "9": nChk = 9; break;
                    default: nChk = 0; break;
                }
                nChk *= nBcd;
                nHap += nChk;
            }
            nChk = nHap / 11;
            nChk *= 11;
            nChk = nHap - nChk;
            if (nChk == 10)
                nChk = 0;
            if (Convert.ToInt16(conNumber.Substring(conNumber.Length - 1, 1)) == nChk)
                return true;
            else
                return false;
        }

'C#' 카테고리의 다른 글

DataTable을 Select하기.  (0) 2020.03.23

C#에서는 강력한 DB 라이브러리를 제공하고 있음에도 제대로 이용하고 있지 못하다. (특히 Linq)

대부분 하드 쿼리를 이용해서 필요한 정보들을 요청하고 정리하는데, 프로그램 상에서 수정할 수 있는 것을 도전해보고 있다.

 

쿼리를 통해 받은 DataTable 객체를 이용하고자 하려니 여러 문제가 생긴다.

가장 간단하게 DataTable에서 Select하고 내용을 쓰려고 하니, Select을 DataRow[]를 반환하는 것이다.

이걸 foreach 혹은 for 문을 돌려 새로운 DataTable 객체에 넣으려니 분통이 터진다.

알고보니 그렇게 할 필요가 없다.

DataTable Table = SomeTable.Select("SomeThing = '100'").CopyToDataTable();

위와 같이 하면, 데이터 테이블을 반환한다.

다만 이렇게 할 경우, Select 이후 DataRow가 0일 경우 에러가 발생한다.

DataRows[] dataRows = SomeTable.Select("SomeThing = '100'")
if(dataRows == null || dataRows.Length == 0)
	return;
DataTable Table = dataRows.CopyToDataTable();

그렇기 때문에 위와 같이 에러 처리를 해주는 것이 좋다.

'C#' 카테고리의 다른 글

[C#] 컨테이너 번호 에러 체크 container number digit check  (1) 2022.09.22

+ Recent posts