<?php 
namespace wstmart\common\validate;
use think\Validate;
/**
 * ============================================================================
 * 认证验证器
 */
class Auth extends Validate{
	protected $rule = [
        ['headImg'  ,'require','请上传头像'],
        ['householdName'  ,'require|chs','请输入户主名|请输入汉字'],
        ['householdIdCard'  ,'require|validation_filter_id_card','请输入身份证号|身份证号错误'],
        ['houseAddress'  ,'require','请输入居住地址'],
        ['accountBookImg'  ,'require','请上传手持户口簿主页照片'],        
        ['payPwd'  ,'require','请输入操作密码'],

        ['companyName'  ,'require|chs','请输入合作名|请输入汉字'],
        ['trueName'  ,'require|chs','请输入姓名|请输入汉字'],
        ['idCard'  ,'require|validation_filter_id_card','请输入身份证号|身份证号错误'],
        ['companyAddress'  ,'require','请输入公司地址'],


        ['familyName'  ,'require|chs','请输入姓名|请输入汉字'],
        ['familyIdCard'  ,'require|validation_filter_id_card','请输入身份证号|身份证号错误'],
        ['familyRelations'  ,'require','请输入与户主关系'],
        ['familyRelationsImg'  ,'require','请上传户主关系证明照'],
        ['idCardFrontImg'  ,'require','请上传身份证正面照'],
        ['idCardBackImg'  ,'require','请上传身份证反面照'],
        ['mobileCode'  ,'require|length:4','请输入验证码'],
        

        ['bankName'  ,'require|chs','请输入银行名|请输入汉字'],
        ['accountName'  ,'require|chs','请输入开户名|请输入汉字'],
        ['bankNo'  ,'require','请输入银行卡号'],

        ['uName'  ,'require|chs','请输入姓名|请输入汉字'],
        ['positionName'  ,'require|chs','请输入职位名|请输入汉字'],
        ['businessImg'  ,'require','请上传手执营业执照照片'],
        ['stake'  ,'require|between:1,100','请输入持股比例|持股比例范围为1-100']

    ];

    protected $scene = [
        'personal'   =>  ['headImg','householdName','householdIdCard','houseAddress','accountBookImg'],//个人实名认证
        'company'  =>  ['headImg','companyName','trueName','idCard','companyAddress'],//合作实名认证
        'report'  =>  ['familyName','familyIdCard','familyRelations','familyRelationsImg'],//亲人报备
        'family'  =>  ['familyRelations','familyRelationsImg','idCardFrontImg','idCardBackImg'],//亲人认证
        'bank'  =>  ['bankName','accountName','bankNo'],//添加银行卡
        'partner'  =>  ['positionName','stake','businessImg','idCardFrontImg','idCardBackImg'],//合作人认证
    ]; 
    // 自定义验证规则
    // protected function checkName($value,$rule,$data)
    // {
    //     return $rule == $value ? true : '名称错误';
    // }
     /**
     * 身份证验证 start
     */
    function validation_filter_id_card($id_card){
        if(strlen($id_card)==18){
            return $this->idcard_checksum18($id_card);
        }elseif((strlen($id_card)==15)){
            $id_card=$this->idcard_15to18($id_card);
            return $this->idcard_checksum18($id_card);
        }else{
            return false;
        }
    }
     // 计算身份证校验码,根据国家标准GB 11643-1999
     function idcard_verify_number($idcard_base){
        if(strlen($idcard_base)!=17){
            return false;
        }
        //加权因子
        $factor=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
        //校验码对应值
        $verify_number_list=array('1','0','X','9','8','7','6','5','4','3','2');
        $checksum=0;
        for($i=0;$i<strlen($idcard_base);$i++){
            $checksum += substr($idcard_base,$i,1) * $factor[$i];
        }
        $mod=$checksum % 11;
        $verify_number=$verify_number_list[$mod];
        return $verify_number;
     }
     // 将15位身份证升级到18位
     function idcard_15to18($idcard){
        if(strlen($idcard)!=15){
            return false;
        }else{
            // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码
            if(array_search(substr($idcard,12,3),array('996','997','998','999')) !== false){
                $idcard=substr($idcard,0,6).'18'.substr($idcard,6,9);
            }else{
                $idcard=substr($idcard,0,6).'19'.substr($idcard,6,9);
            }
        }
        $idcard=$idcard.$this->idcard_verify_number($idcard);
        return $idcard;
     }
     // 18位身份证校验码有效性检查
     function idcard_checksum18($idcard){
        if(strlen($idcard)!=18){
            return false;
        }
        $idcard_base=substr($idcard,0,17);
        if($this->idcard_verify_number($idcard_base)!=strtoupper(substr($idcard,17,1))){
            return false;
    return $user;
        }else{
            return true;
        }
     }
     /***身份证验证 end */
}