별도로 주민등록번호 입력받아 성인인증하기 - 회원전용 > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

별도로 주민등록번호 입력받아 성인인증하기 - 회원전용 정보

별도로 주민등록번호 입력받아 성인인증하기 - 회원전용

본문

※주민등록번호 성인인증하기 - 회원전용

아시다시피, 그누보드에 회원가입시 주민등록번호를 필수로 입력 받을 수 있습니다.
가입폼에서 생년월일 부분을 가입자가 수정할 수 있도록 되어 있다는 점을 참고하시고,
이렇게 기록된 생년월일 정보를 이용해서 성인인증을 한다면, 나이로 사용제한하기(http://sir.co.kr/bbs/tb.php/g4_tiptech/2176)와 같은 팁을 참고하셔도 되겠구요.

꼭 주민등록번호의 생년월일을 이용해서 성인인증을 해야만 하겠다면, 본 내용을 참조하시면
됩니다. 필요시 주민등록번호를 직접 입력받아 성인인증하는 내용입니다.

그누에 포함되어 있는 내용을 나름대로 뽑아서 정리한 것 뿐이구요.
부족한 부분들이 충분히 눈에 띌 수 있다고 생각합니다.
주민등록 번호로 꼭 성인인증을 해야만 하는 곳에만 사용하시면 되겠습니다.
세션을 이용하므로 성인인증이 되면 로그아웃될때까지만 적용됩니다. 따라서,
남용하면 불편할 수도 있으므로 꼭 필요한 곳에만 사용해야 할 것 같습니다;


아시겠지만, 실명인증 이런게 아닙니다 .주민등록번호가 올바른지 정도와 그 번호로
성인인증 하는 겁니다. 그누에서 현재 가입시 주민등록번호를 채크하는 방식에서 벗어나지 않습니다.

====================
1.회원만 적용됩니다.
-회원이 아닌 경우 메시지와 함께 로그인할지 안할지 여부를 묻습니다.
2.회원이고 기록된 자신의 주민등록번호가 있는 경우, 입력한 주민등록번호가 일치하지 않는다면
실패입니다.
3.회원인데 기록된 자신의 주민등록 번호가 없는 경우,
--입력한 주민등록번호와 중복되는 번호가 있다면 실패입니다.
--입력한 주민등록번호와 중복되는 번호가 없는 경우,
----가입시 이름과 입력한 이름을 비교해 다르다면 실패입니다.
----가입시 이름과 입력한 이름을 비교해 같다면, 입력한 번호를 암호화해서 mb_jumin에 기록합니다.
4.인증되면 세션으로 저장해서 로그아웃할때까지 유효합니다.
5.주민등록번호를 입력받는 페이지는 head,tail이 적용된 현재창에서 진행됩니다.
승인 후 목적페이지로 이동합니다. 입력폼부분은 적절히 손보시면 되겠습니다.

※2,3번의 경우는 관리자설정에서 주민등록번호를 사용한다고 채크 되어 있을때
즉, 주민등록번호 회원가입시 필수로 되어 있을때만 적용 되는 사항들입니다.

====================
생성해야할 페이지는 다음과 같습니다.
bbs/jumin_check.php____주민등록번호를 입력받고,승인하는 페이지입니다.
extend/xxx.php_________성인인증 채크하는 함수를 넣습니다.


====================
사용방법은 다음과 같습니다.

▶bbs/view.skin.php 라는 화일에 성인인증을 넣는다면,

<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
jumin_check($url,'humor'); //★주민등록번호 성인인증-회원전용

아래생략...

이런식으로 삽입하시면, humor게시판의 글보기에는 전부 성인인증 페이지를
거쳐야만 됩니다. 승인후에는 로그아웃할때까지 볼 수 있겠죠.


<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
jumin_check($url,'humor',123); //★주민등록번호 성인인증-회원전용

아래생략...

위에 처럼 삽입하시면, humor게시판의 wr_id=123인 글을 볼때만 성인인증 페이지를
거쳐야 됩니다. 승인후에는 로그아웃할때까지 볼 수 있겠죠.



↓작업시작
============================================================
1.
bbs/jumin_check.php 화일의 전체소스 입니다. 그대로 옮기시면 됩니다.


<?
include_once("./_common.php");
$g4[title] = "주민등록번호 성인인증";
include_once("./_head.php");

$mb_name = trim($_POST[mb_name]);
$mb_jumin = trim($_POST[mb_jumin]);
$accept = trim($_POST[accept]);

if (!$member[mb_id])
    confirm("로그인 후 성인회원만 이용이 가능합니다. \\n\\n\\n지금 로그인 하시겠습니까?", "./login.php?wr_id=$wr_id{$qstr}&url=".urlencode($url));
?>

<?
//주민등록번호 성인인증 세션값이 있다면
if (get_session('ss_jumin_check_accept')) {
    if (!$url)
      echo "<script language='JavaScript'>history.go(-1);</script>";
    if ($url)
    goto_url($url);
    exit;
}
?>

<?if ($accept == 'ok') {?>

    <?
    // 리퍼러 체크
    referer_check();

    //주민등록번호 사용 필수라면..
    if ($config[cf_use_jumin]) {

        $jumin = sql_password($mb_jumin); //주민등록번호를 암호화
        $row = sql_fetch(" select mb_name from $g4[member_table] where mb_jumin = '$jumin' "); //중복체크위해

        //회원이 등록된 자신의 주번을 넣지 않았다면..
        if ($member[mb_jumin] && $member[mb_jumin] != $jumin)
            alert("가입하실때 사용하신 주민등록 번호가 아닙니다.\\n\\n관리자에게 문의해 주십시오.");
       
        //주번이 없는 회원이라면..
        //주번필수인데 주번이 없는 회원은 입력 주번을 암호화해 기록합니다. 필요는 부분은 주석처리 하세요.
        if (!$member[mb_jumin]) {
            if (!$row[mb_name]) {//이미 등록된 중복 주번이 없다면..
                if ($member[mb_name] == $mb_name) { //실명이 동일한지 확인
                    @mysql_query("update $g4[member_table] set mb_jumin='$jumin' where mb_name='$mb_name'"); //암호화된 주번기록
                } else {
                    alert("가입하실때 사용하신 실명과 현재 입력하신 실명이 같지 않습니다.\\n\\n관리자에게 문의해 주십시오.");
                }
            } else {
              alert("이미 같은 주민등록번호로 가입하신 회원이 계십니다.\\n\\n관리자에게 문의해 주십시오.");
            }
        }
    }

    // 주민등록번호의 7번째 한자리 숫자
    $y = substr($mb_jumin, 6, 1);
   
    // 주민등록번호 7번째 자리를 따져서...생일은 8자리로 만든다
    $birth = substr($mb_jumin, 0, 6);
    if ($y == 9 || $y == 0) // 1800년대생 (계시려나?)
        $birth = "18" . $birth;
    else if ($y == 1 || $y == 2) // 1900년대생
        $birth = "19" . $birth;
    else if ($y == 3 || $y == 4) // 2000년대생
        $birth = "20" . $birth;
    else // 오류
        $birth = "xx" . $birth;

    $oa = (substr(date('Ymd'),0,4) - substr($birth,0,4)); //만 나이계산
    if ($oa < 19) //만 19세 미만 사용금지
        alert("만 19세 미만은 이용하실 수 없습니다.");

    //주민등록번호 성인인증 세션생성
    set_session('ss_jumin_check_accept', TRUE);

    if ($url)
    {
        $link = urldecode($url);
        // 2003-06-14 추가 (다른 변수들을 넘겨주기 위함)
        if (preg_match("/\?/", $link))
            $split= "&";
        else
            $split= "?";
   
        // $_POST 배열변수에서 아래의 이름을 가지지 않은 것만 넘김
        foreach($_POST as $key=>$value)
        {
            if ($key != "mb_name" && $key != "mb_jumin" && $key != "accept" && $key != "url")
            {
                $link .= "$split$key=$value";
                $split = "&";
            }
        }
    }
    else
        $link = $g4[path];
   
    goto_url($link);
    ?>

<?
} else {
?>

    <?
    if ($url)
        $urlencode = urlencode($url);
    else
        $urlencode = urlencode($_SERVER[REQUEST_URI]);
    ?>
    <table width=600 cellspacing=0 cellspacing=0 align=center>
        <form name="jumin" method="POST" action="javascript:jumin_submit(document.jumin);" autocomplete="off">
        <input type="hidden" name="url" value="<?=$urlencode?>">
        <input type="hidden" name="accept" value="ok">
        <tr><td>
       
            <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
                <td height=25></td>
            </tr>
            <tr>
                <td bgcolor="#CCCCCC">
                    <TABLE cellSpacing=1 cellPadding=0 width=100% border=0>
                    <TR bgcolor="#FFFFFF">
                        <TD width="140" height=30>&nbsp;&nbsp;&nbsp;<b>이름</b></TD>
                        <TD width="">&nbsp;&nbsp;&nbsp;<INPUT name=mb_name itemname="이름" required minlength="2" nospace hangul></TD>
                    </TR>
                    <TR bgcolor="#FFFFFF">
                        <TD height=30>&nbsp;&nbsp;&nbsp;<b>주민등록번호</b></TD>
                        <TD>&nbsp;&nbsp;&nbsp;<INPUT name=mb_jumin itemname="주민등록번호" required jumin minlength="13" maxLength=13><font style="font-family:돋움; font-size:9pt; color:#66A2C8">&nbsp;&nbsp;※ 숫자 13자리 중간에 - 없이 입력하세요.</font></TD>
                    </TR>
                    </TABLE>
                </td>
            </tr>
            </table>
        </td></tr>
        <tr><td height=30></td></tr>
        <tr><td>
            <div align="center">
                <INPUT type=image src="<?=$g4[path]?>/img/my_img/jumin_ok_btn.gif" border=0>
                <a style='cursor:hand' onclick='history.back();'><img src="<?=$g4[path]?>/img/my_img/jumin_cancel_btn.gif" border=0><a>
            </div>
        </td></tr>
        </form>
    </table>
   
    <script language="javascript">
    function jumin_submit(f)
    {
        f.action = "./jumin_check.php";
        f.submit();
    }
   
    if (typeof(document.jumin.mb_name) != "undefined")
        document.jumin.mb_name.focus();
    </script>
    <?
    include_once("./_tail.php");
    ?>

<?}?>

※소스 내용에 confirm()함수는 기본함수가 아니므로 http://sir.co.kr/bbs/tb.php/g4_tiptech/2005
를 참조하세요. 기본 alert()함수로 바꿔서 쓰셔도 됩니다.
※부족한 부분이나 잘못된 부분은 아시는 분께서 손봐주시면 좋겠습니다.
============================================================
2.
extend/xxx.php 처럼 임의의 적절한 이름의 화일안에 아래 소스를 추가해 주시면 됩니다.

<?
if (!defined("_GNUBOARD_")) exit; // 개별페이지 접근불가


//소스삽입시작

//주민등록번호 성인인증하기 - 회원전용
//$url-인증 후 이동 할 페이지,$table-게시판테이블명, $wid-게시물번호
//bbs/jumin_check.php 화일과 함께 사용하는 겁니다.
//예) jumin_check($url); //현재페이지에 적용
//예) jumin_check($url,'humor'); //humor게시판에만 적용
//예) jumin_check($url,'humor',123); //humor게시판의 wr_id=123인 게시물에만 적용

function jumin_check($url,$table='',$wid='') {

global $g4;
global $bo_table;
global $wr_id;
   
    if (!$table) $table = $bo_table;
    if (!$wid) $wid = $wr_id;
    //주민등록번호 성인인증 세션값이 없다면 인증페이지(jumin_check.php)로 이동
    if (!get_session('ss_jumin_check_accept') && !$is_admin && $bo_table == $table && $wr_id == $wid) {

        if ($url)
            $urlencode = urlencode($url);
        else
            $urlencode = urlencode($_SERVER[REQUEST_URI]);
       
        $path = $g4[path]."/bbs/jumin_check.php?url=".$urlencode;

        echo "<script language='JavaScript'> location.replace('$path'); </script>";
        exit;
    }
    return;
}

//소스삽입끝
?>

============================================================
↑작업 끝

※잘못된 곳 있으면 말씀해 주세요.
추천
5

댓글 24개

※소스 내용에 confirm()함수는 기본함수가 아니므로 http://sir.co.kr/bbs/tb.php/g4_tiptech/2005
를 참조하세요. 기본 alert()함수로 바꿔서 쓰셔도 됩니다. 멘트만 좀 바꾸시면 됩니다. 깜빡잊었습니다.
감사합니다.^^
가입시 주민번호를 받지않을경우 어떤식으로 처리해야할지 고민이었는데
고민을 말끔히 털어내도록 만드셨네요.
위와 같은 방법으로 했는데, 오류가 나네요.

두개의 파일 생성해서 넣고(bbs/jumin_check.php, extend/madu.php)
성인관련 게시판 리스트페이지와 뷰페이지에 체크인증넣고했는데,


Warning: Cannot modify header information - headers already sent by (output started at /home/hosting_users/onlineplayground/www/extend/madu.php:39) in /home/hosting_users/onlineplayground/www/head.sub.php on line 32

33번라인을 제외한  32~38번까지 위와 같은 형식으로 오류납니다.
왜 그런지 잘 모르겠어서요.
성공하신 분들 코치좀 부탁드립니다.

head.sub.php 를 보면

32-> header("Content-Type: text/html; charset=$g4[charset]");
33-> $gmnow = gmdate("D, d M Y H:i:s") . " GMT";
34-> header("Expires: 0"); // rfc2616 - Section 14.21
35-> header("Last-Modified: " . $gmnow);
36-> header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
37-> header("Cache-Control: pre-check=0, post-check=0, max-age=0"); // HTTP/1.1
38->header("Pragma: no-cache"); // HTTP/1.0
좋은 자료 잘 보았습니다.

그런데 로그인과 관련없이, 비회원도 성인인증 후에는 모든 게시판을 열람할 수 있도록 하려면 어떻게 해야 할까요?

이리저리 시도해 보다가 도저히 못하겠어서 질문드립니다 ㅠㅠ
전체 3,313 |RSS
그누4 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT