[C# 개발] SMS 인증 번호를 발송해, 휴대폰 본인인증 확인하는 시스템 구현하기 (WinForm)

2022. 11. 18. 02:08·■ Dev. Language/C#
반응형

0. 목적

C# 언어를 사용한 윈도우 폼을 제작해, 일반적인 회원가입 화면에서 진행하는 휴대폰 번호 본인 인증 시스템을 간단하게 구현해 보도록 한다. 개인적인 간단한 프로젝트에서 사용하기 위한 방법으로, 사설 SMS 업체를 이용하도록 한다. (광고 X)

 

다날과 같은 일반적인 통신사 PASS를 통한 본인인증의 경우에는, 해당 업체와 계약을 맺어야 하므로 개인 프로젝트에서는 활용하기 어려운 것이 까닭이다. 상용화 프로그램을 제작하기 위해서라면, 다날과 같은 업체와 분명히 계약을 맺고 진행해야 할 것 이다.


1. 참고

C# 언어를 사용한 윈도우 폼의 이메일 인증 시스템 구현 방법은 아래의 링크를 참고하도록 하자.

 

[C# 개발] 인증 번호를 발송해 이메일 본인인증 확인하는 시스템 구현하기

● 개발목적 윈도우 폼을 제작하여 C#. NET 언어를 이용해, 회원가입시 진행하는 이메일 본인 인증 시스템을 간단하게 구현해 보도록 한다. 이를 토대로 회원가입 폼에 응용해 적용할 수 있다. ●

acredev.tistory.com

본 포스트에서 사용된 IDE는 Visual Studio Community 2022 버전을 사용했다.


2. CoolSMS API KEY 발급

아래의 링크에 접속해 서비스 회원가입 절차를 진행한다.

 

https://console.coolsms.co.kr/signup

 

console.coolsms.co.kr

회원가입 절차는 너무나 간단하기 때문에 생략하도록 하겠다.

 

 

회원가입 완료 후, 로그인을 하게 되면 CoolSMS 대시보드 화면이 출력된다. 좌측 트리 메뉴의 개발 / 연동 → API Key 관리 버튼을 클릭한다.

 

 

 

필자는 이미 API Key를 발급해 둔 상태라, 초기 세팅을 하는 사용자들과는 다른 화면이 출력될 것이다. API Key가 없는 사용자들은 + 새 API KEY 생성 버튼을 눌러, 간단한 본인인증 절차를 거친 후 SMS 발송을 위한 API Key를 발급받도록 한다.

 

 

 

정상적으로 완료되면 API Key와 API Secret번호가 생성되게 된다. 이 내용을 잘 기억해 두어, C# 코드 작성 시에 사용할 수 있도록 한다.


3. 윈도우 폼 제작

Visual Studio에서 새로운 WinForm 프로젝트를 생성하고, Form1.cs을 위와 같이 디자인 한다.

요소 종류 속성
① Label ㆍ모양 → Text : 전화번호
② Label ㆍ모양 → Text : 인증번호
③ TextBox ㆍ디자인 → Text : txtbox_tel
④ TextBox ㆍ디자인 → Text : txtbox_num
⑤ Button ㆍ모양 → Text : 인증번호 발송
ㆍ디자인 → Text : btn_sendnum
⑥ Button ㆍ모양 → Text : 인증 확인
ㆍ모양 → Text : btn_checktel

4. NuGet 패키지 추가

Visual Studio 상단 메뉴의 프로젝트 → NuGet 패키지 관리 버튼을 클릭한다.

 

 

 

찾아보기 → coolsms를 검색하고, NuGet 패키지를 설치한다.


5. 코드 작성

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CoolSms; // CoolSMS Client (NuGet 패키지) 사용 참조

코드 작성 블럭으로 진입해, CoolSMS 클라이언트 사용을 위한 CoolSms 참조를 using 해준다.

 

 

 

private string coolsms_apikey = "CoolSms에서 발급받은 API Key";
private string coolsms_apisecret = "CoolSms에서 발급받은 Secret Key";
private string coolsms_senderid = "CoolSms에 등록된, 문자가 발송될 전화번호";

Form1 Class 내부에는, private 형태의 문자열 변수 3개를 선언한다. 각각 API Key, API Secret Key, 발송 전화번호를 관리하기 위한 변수로서, 외부에서 접근할 수 없도록 private 형태로 선언했다.

 

coolsms_apikey 변수에는 CoolSMS 서비스에서 발급받은 API Key를, coolsms_apisecret 변수에는 CoolSMS 서비스에서 발급받은 API Secret Key를 변수값으로 넣으면 된다.

 

coolsms_enderid 변수의 경우, 임의의 전화번호를 넣는 것이 아닌 CoolSMS 상에서 본인인증 절차를 거쳐 등록된 본인 전화번호를 입력하도록 한다. 해당 번호로 문자가 발송될 것이다. 해당 기능은 본인 명의의 전화번호를 2회선 이상 CoolSMS 상에 등록해 두었을 경우, 발신 번호를 어떤 것으로 할지 결정하는 부분이다. 따라서 CoolSMS상 발송용 대표 번호로 지정된 전화번호를 입력해야지, 임의의 전화번호를 넣으면 절대 안 된다. (오류가 발생하며 SMS 발송이 이뤄지지 않는다.)

 

 

 

SmsApi sms = new SmsApi(new SmsApiOptions
        {
            ApiKey = coolsms_apikey,
            ApiSecret = coolsms_apisecret,
            DefaultSenderId = coolsms_senderid,
        });

그 아래에는 CoolSMS를 사용하기 위한 sms 객체를 하나 생성한다. ApiKey와 ApiSecret, DefaultSenderId에는 앞서 선언했던 문자열 private 변수를 하나씩 넣어주면 된다.

 

 

 

public static Random randomNum = new Random();
public static int checkTel_Num = randomNum.Next(10000000, 99999999);

그 아래에는 난수 발생을 위한 randomNum 객체를 생성해 주었고, randonNum 객체는 10,000,000 ~ 99,999,999 사이의 8자리 난수값이 발생하도록 지정했다. 발생한 난수값은 정수형 checkTel_Num 변수에 저장된다.

 

난수를 발생할 객체 randonNum과, 변수 checkTel_Num은 해당 폼 내의 모든 객체만 공통으로 공유하고 사용해야 할 값이기 때문에 정적 멤버변수인 static으로 선언했다.

 

 

 

private void btn_sendnum_Click(object sender, EventArgs e)
        {
            var body = sms.SendMessageAsync
			(txtbox_tel.Text,
			"본인인증을 위해 다음 인증 번호를 입력 바랍니다.\n" + "[" + checkTel_Num.ToString() + "]");
            MessageBox.Show(txtbox_tel.Text + "번으로 인증 번호가 발송 되었습니다.");
        }

btn_sendnum 버튼을 더블 클릭 해, 인증번호 발송 버튼 클릭 시 조치할 적절한 SMS 내용을 구성하고, SMS 발송을 위한 관련 정보값들을 넘겨주면 된다.

 

CoolSMS API의 SMS 발송 구조는?

▣ var 자료형으로 선언한 body 변수

C# 코드 내에서 자동으로 형식을 지정할 수 있도록 var 키워드를 사용해 body 변수를 선언한다.
body 변수에는 sms.SendMessageAsync 메서드가 선언된다.

▣ sms.SendMessageAsync 메서드의 구조

(SMS를 수신할 전화번호, 문자 내용)
매우 간단하다. 괄호 사이에 해당 내용만 적절히 넣어주면 된다.

 

문자가 발송되면 MessageBox를 띄워, 어떤 휴대전화 번호로 인증 번호가 수신될 예정인지, 사용자에게 직관적으로 확인할 수 있게 편의성을 도모했다.

 

 

 

private void btn_checktel_Click(object sender, EventArgs e)
    {
        if (txtbox_num.Text == checkTel_Num.ToString())
        {
            MessageBox.Show("휴대폰 인증이 성공했습니다.");
        }
        else
        {
            MessageBox.Show("휴대폰 인증이 실패했습니다. 인증번호 재 확인 바랍니다.");
        }
    }

btn_checktel 버튼을 더블 클릭 해, 인증 확인 버튼을 클릭하면 사용자가 입력한 txtbox_num의 인증번호 값과 프로그램 내에서 생성했던 checkTel_Num 의 8자리 난수값이 일치하는지 확인하는 코드를 작성한다.

 

인증 번호가 일치할 경우 휴대폰 인증이 성공했습니다. 라는 MessageBox를 출력하고, 인증 번호가 불일치 할 경우 휴대폰 인증이 실패했습니다. 인증번호 재 확인 바랍니다. 라는 MessageBox를 출력한다.

 

 

▣ 전체 스크립트 코드

더보기
전체 스크립트 코드가 필요한 사람들을 위해 첨부한다.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CoolSms; // CoolSMS Client (NuGet 패키지) 사용 참조

namespace SMSSystem
{
    public partial class Form1 : Form
    {
        private static string coolsms_apikey = "API 키를 입력";
        private static string coolsms_apisecret = "API Secret 키를 입력";
        private static string coolsms_senderid = "CoolSMS 등록된 본인 번호 입력";

        SmsApi sms = new SmsApi(new SmsApiOptions
        {
            ApiKey = coolsms_apikey,
            ApiSecret = coolsms_apisecret,
            DefaultSenderId = coolsms_senderid,
        });

        public static Random randomNum = new Random();
        public static int checkTel_Num = randomNum.Next(10000000, 99999999);
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void btn_sendnum_Click(object sender, EventArgs e)
        {
            var body = sms.SendMessageAsync(txtbox_tel.Text, "본인인증을 위해 다음 인증 번호를 입력 바랍니다.\n" + "[" + checkTel_Num.ToString() + "]");
            MessageBox.Show(txtbox_tel.Text + "번으로 인증 번호가 발송 되었습니다.");
        }

        private void btn_checktel_Click(object sender, EventArgs e)
        {
            if (txtbox_num.Text == checkTel_Num.ToString())
            {
                MessageBox.Show("휴대폰 인증이 성공했습니다.");
            }
            else
            {
                MessageBox.Show("휴대폰 인증이 실패했습니다. 인증번호 재 확인 바랍니다.");
            }
        }
    }
}

6. 실행 결과

정상적으로 문자 발송이 이루어지고, 인증번호를 입력했을 때 일치 / 불일치 여부를 잘 판단하는 모습을 확인할 수 있다. 해당 코드를 잘 응용한다면 SMS 발송 시스템 또한 WinForm 을 이용해 만들 수 있을 것이다.

300x250
반응형
저작자표시 비영리 변경금지 (새창열림)
'■ Dev. Language/C#' 카테고리의 다른 글
  • [C# 개발] MySQL DB 연동: 중복된 데이터인지 검사하는 프로그램 만들기 (WinForm)
  • [Tip] C# MySQL, Visual Studio 사용 방법 및 연결 테스트 : NuGet Package를 통한 연동
  • [C# 개발] 인증 번호를 발송해 이메일 본인인증 확인하는 시스템 구현하기
  • [C# 개발] MySQL DB 연동을 통해 간단한 로그인 및 회원가입 폼 만들기
Min Hyuk-Lee
Min Hyuk-Lee
시스템 엔지니어로 근무하고 있습니다.
  • Min Hyuk-Lee
    아크레의 개발로그
    Min Hyuk-Lee
    m_file@naver.com
  • 전체
    오늘
    어제
    • 📝 Log. (82) N
      • ■ Dev. Language (11)
        • C (5)
        • C# (6)
      • ■ Dev. ETC (8)
        • Unity 3D (3)
        • Android Studio (JAVA) (5)
      • ■ Web (6)
        • HTML (3)
        • JSP (3)
      • ■ Linux (8)
        • Shell (2)
        • Linux Tip. (6)
        • 보안취약점 진단 (0)
      • ■ Windows (4)
        • Server (1)
        • Windows Tip. (3)
      • ■ VM (1)
        • VMWare (1)
        • Virtual Box (0)
      • ■ Database (9)
        • MySQL (7)
        • OracleDB (2)
      • ■ DevKit (5)
        • IDE (4)
        • Tool (1)
      • ■ Error (18) N
        • Linux 오류해결 (4)
        • DB 오류해결 (4) N
        • IDE 오류해결 (2)
        • VM 오류해결 (3)
        • Unity 오류해결 (4)
        • SSH, SFTP 오류해결 (1)
      • ■ Photoshop (3)
        • 디자인&이미지 창작 (3)
      • ■ Document (3)
        • MS Word (2)
        • PDF (1)
      • ■ Study (4)
        • Baekjoon (4)
      • ■ 작문 (1)
        • 회고 (1)
      • ■ ETC (1)
        • Car (0)
        • etc (1)
  • 🌐 Menu

    • 📓 Guestbook
  • 🔗 Other Links

    • GitHub
    • 아크레의 IT ISSUE
  • 📢 Notice

    • [스킨 업데이트] hELLO v4.10.0 적용완료
    • [스킨 업데이트] hELLO v4.9.0 적용 완료
    • [스킨 업데이트] hELLO v4.8.1 적용 완료
  • 💬 Recent Comments

  • hELLO· Designed By정상우.v4.10.0
Min Hyuk-Lee
[C# 개발] SMS 인증 번호를 발송해, 휴대폰 본인인증 확인하는 시스템 구현하기 (WinForm)
상단으로

티스토리툴바