반응형

심심풀이로 로또의 추첨결과 정보를 가져오는 프로그램을 작성하려고 한다.

 

로또복권 운영사인 동행복권 홈페이지에서는 별도의 API를 제공하지 않지만 홈페이지의 소스를 보다보면

 

아래와 같이 내부에서 결과 정보를 호출하는 구문이 있고, 쿼리 URL을 쉽게 찾을 수 있다.

로또 추첨결과의 회차별 정보를 가져오는 URL은 다음과 같다.

 

로또 추첨 결과 쿼리 URL: https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=1119

쿼리의 "drwNo" 값이 회차 이다.

 

쿼리가 정상적으로 수행되었을때 수신되는 메시지(JSON)는 다음과 같다.

 

{
   "totSellamnt":111840714000,					//전체 당첨 상금 총액(1등~5등 모든 당첨금액)
   "returnValue":"success",						//요청결과(정상:success, 실패:fail)
   "drwNoDate":"2024-05-11",					//추첨일
   "firstWinamnt":1396028764,					//1등 추첨자의 당첨금액
   "drwtNo6":45,								//6번째 번호
   "drwtNo4":13,								//4번째 번호
   "firstPrzwnerCo":19,							//1등 당첨자 수
   "drwtNo5":20,								//5번째 번호
   "bnusNo":3,									//보너스번호 번호
   "firstAccumamnt":26524546516,				//1등 총 당첨금액(1등 당첨금액 * 1등 당첨자 수)
   "drwNo":1119,								//회차 번호
   "drwtNo2":9,									//2번째 번호
   "drwtNo3":12,								//3번째 번호
   "drwtNo1":1									//1번째 번호
}

 

JSON 구조로 쉽게 파싱하도록 되어있다.

아래의 당첨결과 상세페이지의 내용가 대조하면 쉬울 듯 하다.

 

추가로 최신 회차를 구하는 계산식 함수는 다음과 같다,

 

# 로또 1회차(2002-12-07)기준으로 오늘까지의 회차를 가져오는 함수
def get_last_rounds():
    start_date = datetime.date(2002, 12, 7) #1회 추첨일
    today = datetime.date.today()
    # 주차 계산
    weeks = (today - start_date).days // 7
    return weeks + 1

2002-12-07이 1회 추첨일이므로 이기준으로 오늘까지의 주차수(weeks)를 구하여 +1을 해준다.

반응형

지난번에 C++를 이용하여 로또(6/45) 번호를 생성하는 코드를 작성해봤는데 이번에는 C#을 이용하여 작성해봤다.


2019/03/29 - [Programming] - [C++] 로또 번호 생성 코드 (rand, list)



코드는 여타 로또 번호 생성하는 코드와 비슷하게 Rand함수를 이용한다.


C++ 이든 C#이든 Rand함수를 이용할 때 시드값(Seed)을 넣어줘야만 난수 생성시 중복되는 경우를 줄일 수 있다.


코드는 아래와 같다.


        private List GetLotteryNumber()
        {
            int nNum = 0;
            List listLottery = new List();
            for (int i = 0; i < LOTTONUM; i++)
            {
                Random rand = new Random(((int)DateTime.Now.Ticks) + i);
                nNum = rand.Next(1, 45);
 
                if(!listLottery.Contains(nNum))
                    listLottery.Add(nNum);
                else{
                    i--;
                    continue;
                }
            }
            return listLottery;
        } 


GetLotteryNumber 함수의 리턴값 타입으로 List를 이용했는데 이건 내가 쓰기 편해서 List를 이용했다.

더 쉬운 방법으로 배열을 이용하면 된다.

Random함수를 통해 난수를 1부터 45까지의 난수를 생성하여 중복된 값인지 체크하고 중복값이라면 반복문을 한스텝 빼주고 continue로 처리했다.


반응형

심심해서 로또 번호 생성 코드를 짜봤다.


일단 로또번호는 1부터 45까지의 수에서 중복없이 6개로 이뤄진다.


그래서 rand함수로 번호를 뽑은다음, 중복값인지 체크하는 루틴도 있어야 한다.


배열 이용하는 방법이 가장 쉽고 간편하지만, 여기서는 STL 리스트를 이용해 본다.


#define LOTTONUM 6

	std::list listNum;
	srand((unsigned)time(NULL));
	int nNum = 0;
	listNum.clear();
	for (int i = 0; i < LOTTONUM; i++)
	{
		nNum = rand() % 45 + 1;

		if (std::find(listNum.begin(), listNum.end(), nNum) == listNum.end())
			listNum.push_back(nNum);
	}


+ Recent posts