如何用thinkphp verify验证 写多个验证

豪华班车:在线看片idfaverify,用的人太多被玩坏(早上不卡)-120养生网
当前位置:&>&&>&
豪华班车:在线看片idfaverify,用的人太多被玩坏(早上不卡)
一款可以在线看片的软件,片多速度快,片库模式,不是云播放软件。这也是和前几天推荐的37pao一样,IOS上唯一几款,不越狱可以在线看片的软件了。苹果软件37pao挂羊头卖狗肉,苹果公司
&一款可以在线看片的软件,片多速度快,片库模式,不是云播放软件。
这也是和前几天推荐的37pao一样,IOS上唯一几款,不越狱可以在线看片的软件了。
苹果软件37pao挂羊头卖狗肉,苹果公司也要加强审核啊
这个软件也是高科技,用认证系统跳过审核,输入正确的验证网址后才可使用。
IOS客户端具体步骤如下:
1、在APP STORE上搜索安装&idfaverify&;
2、安装完成后,在界面中输入验证网址,验证网址是下面第三图上面的,自己手动输入一下验证;
3、验证完成后,就可以在线观看作品了,可以按照分类或者女优名字等筛选,速度很快。
安卓版就更简单了,随便打开一个浏览器,输入刚才提到的验证网址,不用像IOS那么麻烦需要验证,直接下载安装客户端即可。
更推荐苹果设备使用,因为安卓客户端在第一次打开时,要下载其他的广告软件才能使用。
福利吧分享,转载不写出处没JJ。
====更新====
昨天用的好好的,速度也很快,今天发出来就被大家玩坏了。
验证后进不去网址,速度很慢,明显是人太多了,LOL。
我福吧人太多了,什么车能扛得住~下次还是不要大范围分享了。
大家正在看…
文章阅读排行
NO.1 佩戴胸罩会引起乳腺疾病吗?目前还没有证据来说明这个观点。但...thinkphp 验证码 Verify,有需要的朋友可以参考下。
thinkphp3.2把验证码类放到核心目录里面了
ThinkPHP/Library/Think/Verify.class.php
Verify类对外只暴露两个方法
entry($id = '')
生产验证码:输出验证码并把验证码的值保存的session中
不传id时保存如下
$session['verify_code'] = $ // 把校验码保存到session
$session['verify_time'] = $_SERVER['REQUEST_TIME'];
传id时保存如下
$session[$id]['verify_code'] = $ // 把校验码保存到session
$session[$id][['verify_time'] = $_SERVER['REQUEST_TIME'];
验证验证码:对比$code(用户传入的验证码)和session中的值对比
check($code, $id = '')
namespace Home/C
use Think/C
class IndexController extends Controller {
//显示验证码
public function index() {
$Verify = new /Think/Verify();
$Verify-&entry();
//模拟验证
public function verify() {
$code = $_REQUEST['code'] = 'wnmfm';
$Verify = new /Think/Verify();
if ($Verify-&check($code)) {
echo '验证通过';
echo '验证失败';
Verify类构造函数__construct($config = array()) 去合并配置信息
创建验证码时可以写成如下配置指定生产大小
$config = array(
'imageH' =& 300, // 验证码图片高度
'imageW' =& 500, // 验证码图片宽度
$Verify = new /Think/Verify($config);
$Verify-&entry();
最新教程周点击榜
微信扫一扫verify验证使用说明
  通过使用html中表单元素的自定义属性verify和condition来达到自动校验表单元素是否填写正确、并根据校验结果提示相应信息的目的。页面初始化时会为每个带有verify属性的表单元素附加相应的onkeyup、onchange、onfocus事件,以便于这些事件被触发时自动校验与提示。
在html中的用法
  Verify在html中的用法如下所示:&input type=&text& id=&Code& verify=&代码|NotNull&&Int& condition=&$NV('Type')=='Custom'&/&
  其中verify属性值为校验字符串,由以&|&分隔的两部分组成,前半部分表示控件信息,后半部分表示校验规则,一个控件可以有多个校验规则,各个校验规则之间以&&&&分隔。condition属性值表示当condition所指明的JavaScript语句返回值为真时才校验,否则不校验。
& &可用的校验规则包括:
  NotNull:不能为空。
  Number:必须是数字。
  Int:必须是整数。
  Time:必须是时间。
  Date:必须是日期。
  DateTime:必须是带日期的时间。
  Email:必须是合法的电子邮件地址。
  Regex:表示控件值必须符合指定的正由表达式,例如verify=&Regex=\d{4}&表示控件值必须是4位数字。
  Script:表示指定的JavaScript脚本返回值必须为真,例如verify=&Script=check()&表示执行check(),如果check()返回值为真则校验通过,否则校验不通过。
  以上为例,如果onkeyup、onchange、onfocus事件触发时$NV('Type')=='Custom'成立且控件的值为空或者不是整数,则会自动提示&代码为不能为空&或者&代码为必须是整数&。
提交数据时的用法
  表单提交或者调用Server.sendRequest时需要事先校验页面中的相应元素是否已正确填写,这时可以使用类似如下的JavaScript语句:
if(Verify.hasError(arr,ele)){
Verify.hasError会自动检查ele下的所有(但不在arr之内)的表单元素是否己正确填写,如果有未正确填写的,则弹出提示对话框。如果Verify.hasError的参数为空,则检查整个页面。
示例(校验表单F1下所有表单元素,但不包括ID为Code和Name的元素):
if(Verify.hasError([&Code&,&Name&],&F1&)){
  校验规则为1-7时,提示信息=控件信息+校验规则含义,如verify=&ID|NotNull&且校验未通过时,则提示&ID不能为空&;
  校验规则为1-7时,校验字符串可以不写提示信息,如verify=&NotNull&且校验未通过时,则提示&不能为空&;
  校验规则为8、9时,提示信息就是控件信息,如verify=&必须是合法的IP|Regex=\d{1-3}\.\d{1-3}\.\d{1-3}\.\d{1-3}\&且校验未通过时,则提示&必须是合法的IP&。
网友评分:
读完这篇文章后,您心情如何?
Copyright (C) 2007-. All Rights Reserved
北京泽元迅长软件有限公司 版权所有 京ICP备号-1
本站内容由泽元网站内容管理系统(ZCMS)生成12893人阅读
tools(20)
openssl verify 命令对证书的有效性进行验证,verify 指令会沿着证书链一直向上验证,直到一个自签名的CA。
根据&&建立自签名的root CA,然后再用root CA签发另一个CA(我命名为alice),在用alice签发用户second的证书。最后我们对bob的证书进行验证。
目录结构为
│& └─demoCA
│&&&&& ├─newcerts
│&&&&& └─private
├─demoCA
│& ├─newcerts
│& └─private
└─second
openssl verify[-CApath directory] [-CAfile file] [-purpose purpose] [-policy arg] [-ignore_critical] [-crl_check] [-crl_check_all]
[-policy_check] [-explicit_policy] [-inhibit_any] [-inhibit_map] [-x509_strict] [-extended_crl] [-use_deltas] [-policy_print]
[-untrusted file] [-help] [-issuer_checks] [-verbose] [-] [certificates]
-CApath directory&&&& 指定CA证书所在的目录,这个目录下可能存在证书链中的多个证书文件。为了对这个目录下的证书进行检索,证书文件的命名需要遵循xxxxxxxx.0,其中xxxxxxxx是openssl x509 -hash -in 证书, 的输出值,8个字母或数字。“.0”是要有的。
用root CA对alice的证书进行验证,使用-CApath选项。我们首先要x509命令的 -hash选项计算root CA的hash值。我们假定CApath目录为“CApath”,首先建立目录CApath,我们这次的工作目录依然为e:\openssl\foo.
E:\OpenSSL\foo&mkdir CApath
E:\OpenSSL\foo&openssl x509 -hash -in demoCA\cacert.pem -noout
E:\OpenSSL\foo&cp demoCA\cacert.pem CApath\3ff5a598.0
对alice的证书进行验证
E:\OpenSSL\foo&openssl verify -CApath CApath alice\demoCA\cacert.pem
alice\demoCA\cacert.pem: OK对bob的证书进行验证。在对bob证书验证前,需要先对alice的证书进行x509 -hash ,计算证书hash,并重命名复制到CApath目录下。
E:\OpenSSL\foo&openssl x509 -hash -in alice\demoCA\cacert.pem -noout
# 计算hash
E:\OpenSSL\foo&cp alice\demoCA\cacert.pem CApath\b9c7a1d7.0
# 按hash值重命名,并放到CApath指定的目录下
E:\OpenSSL\foo&openssl verify -CApath CApath bob\bob.pem
bob\bob.pem: OK
-CAfile& filename&&& 指定CA的证书文件,PEM格式,这个文件里可能不只包含一个证书。如果需要对证书链进行验证,指定的文件中应包含所有的证书。加入顶级CA证书文件名为0.pem,一级CA证书文件为1.pem,二级证书文件为2.pem,待验证的证书文件是eve.pem,那么需要先将0.pem,1.pem证书文件的内容包含到2.pem中。证书文件都是文本文件,简单地使用cat命令就可以进行连接。
cat 0.pem && 1.pem
cat 1.pem && 2.pem使用CAfile选项,对bob证书进行验证
E:\OpenSSL\foo&cat demoCA\cacert.pem && alice\demoCA\cacert.pem
E:\OpenSSL\foo&openssl verify -CAfile alice\demoCA\cacert.pem bob\bob.pem
bob\bob.pem: OK
其他的,待完善...
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:362322次
积分:3986
积分:3986
排名:第6970名
原创:79篇
转载:30篇
评论:21条
文章:21篇
阅读:41351
(1)(1)(1)(3)(5)(16)(15)(28)(2)(8)(20)(10)我是如何实现一个通用的验证基类的? - 推酷
我是如何实现一个通用的验证基类的?
验证的基本流程和基本场景
验证一个控件,其步骤如下
获取控件的值
提供默认的控件的取值方法
可以通过注册控件的方法来注册获取某个控件的值
判别要验证的类型: isNumber , NotNull ……
通过绑定到的实体类的特性,我们可以知道具体的类型
在调用方法中指定验证的类型
调用验证函数进行验证
默认的调用函数
通过方法传递进来的验证函数
验证失败提示失败信息
基本的类型有默认的提示:不能为空、必须为数字、必须为日期……
通过方法传入
提示的方法可以由子类进行重写 ,这样就能根据不同的子类方法,达到实现不同的提示类型
验证多个控件,其实就是递归所有的控件组,调用“一个控件的验证”
一个 Form 下的所有控件
某个容器控件(比如 Panel 、 TabPage ……)下的所有控件
使用方法示例
以下通过一些具体的示例来展示上述验证类的使用方法
支持DevExpress的控件以及使用DevExpress的气泡控件和高亮控件进行提示
private BalloonValidator(Type type)
: base(type)
Register&TextBoxX&(new[] { &txt& }, t =& ((TextBoxX)t).Text)
.Register&ComboBoxEx&(new[] { &ddl& }, t =&
var ddl = (ComboBoxEx)t;
if (ddl.DropDownStyle == ComboBoxStyle.DropDown)
return ddl.T
return ddl.SelectedIndex & 0 ? &MSG& : string.E
.Register&CheckBoxX&(new[] { &chk& }, t =& ((CheckBoxX)t).CheckState == CheckState.Indeterminate ? string.Empty : &MSG&)
.Register&IntegerInput&(new[] { &ii& }, t =& ((IntegerInput)t).Text);
public BalloonValidator(Type type, BalloonTip tip)
: this(type)
public BalloonValidator(Type type, BalloonTip tip, Highlighter highlighter)
: this(type, tip)
_highligther =
重写错误验证时的提示
public override Validator HandleError(Control ctrl, string errorMsg)
ShowBalloonTip(ctrl, errorMsg);
if (_highligther != null) _highligther.SetHighlightColor(ctrl, eHighlightColor.Red);
重新验证正确时的方法
public override Validator HandleSuccess(Control ctrl)
_tip.Remove(ctrl);
if (_highligther != null) _highligther.SetHighlightColor(ctrl, eHighlightColor.None);
实际使用示例
实例化一个验证类: _validator = new BalloonValidator(typeof(NTier.Entity.CWGL_AccountHis), balloonTip1, highlighter1);
对所有默认的控件进行验证: if (!_validator.Verify(Controls))
对控件名称和实体属性名称无法匹配的进行手动验证: if (!_validator.Verify(txtMoney, &发生金额&, Validator.VerifyType.Number)) ——
实体类 NTier.Entity.CWGL_AccountHis 没有类型Money这样的属性
对于由多个控件组成的属性,是无法根据属性的类型进行验证的,这个时候需要手动写验证函数: if (!_validator.Verify(lblUnSureCost, &请选择费用是否确定&, () =& rbtnYes.Checked || rbtnNo.Checked))
对于复杂的验证方法,同样可以通过自定义验证函数进行验证: if (!((NTier.Entity.CWGL_AccountNew)ddlFNumber1.SelectedItem).FisDetail)
if (!_validator.Verify(ddlFNumber2, &二级科目&, Validator.VerifyType.Required))
if (ddlFNumber2.SelectedIndex & 0 &&
!((NTier.Entity.CWGL_AccountNew)ddlFNumber2.SelectedItem).FisDetail)
if (!_validator.Verify(ddlFNumber3, &三级科目&, Validator.VerifyType.Required))
实现的类的基本方法概览
///首先定义控件存储对象
class CtrlObject
public string Key { }
public Type Type { }
public string[] Prefix { }
public Func&Component, object& GetValue { }
public CtrlObject(Type type, string[] prefix, Func&Component, object& getValueHandler)
if (getValueHandler == null) throw new ArgumentNullException(&getValueHandler&);
GetValue = getValueH
Key = type.FullN
public Validator Register&TCtrl&(string[] prefix, Func&Component, object& getValue, bool cover = false)
var ctrlObj = new CtrlObject(typeof(TCtrl), prefix, getValue);
if (!_getValueHandler.ContainsKey(ctrlObj.Key)) _getValueHandler.Add(ctrlObj.Key, ctrlObj);
else if (cover) _getValueHandler[ctrlObj.Key] = ctrlO
在构造函数中注册默认的控件
private Validator()
Register&TextBox&(new[] { &txt& }, t =& ((TextBox)t).Text)
.Register&ComboBox&(new[] { &ddl& }, t =& ((ComboBox)t).SelectedIndex & 0 ? &MSG& : string.Empty)
.Register&DateTimePicker&(new[] { &dtp& }, t =&
var date = (DateTimePicker)t;
if (date.Checked) return date.V
public Validator(Type t)
if (t != null)
foreach (var p in t.GetProperties(BindingFlags.Instance | BindingFlags.Public))
if (!_properties.ContainsKey(p.Name)) _properties.Add(p.Name, p);
验证单一控件是否合法
public bool Verify(Control ctrl)
var args = OnBeforeVerify(ctrl);
return args.Canceled || ValidateInner(ctrl);
private bool ValidateInner(Control ctrl, bool triggerAllInvalidControl = true)
if (_properties.Count == 0) throw new Exception(&请先设置要验证的对象类型!&);
//获取对应的处理器,如果没有,则默认不加入验证
var handler = GetHandler(ctrl);
if (handler == null)
var value = handler.GetValue(ctrl);
var property = GetProperty(handler.Prefix, ctrl);
if (property == null)//找不到对应的属性
var result = ((ValidateRequired(property, value)
?? ValidateDataType(property, value))
?? ValidateStingLength(property, value))
?? ValidateRegularExpression(property, value);
if (result != null)
if (triggerAllInvalidControl)
foreach (var key in _invalidControls.Keys)
if (ctrl.Name.Equals(key))
ValidateInner(_invalidControls[key], false);
HandleError(ctrl, result.ErrorMessage);
if (triggerAllInvalidControl && !_invalidControls.ContainsKey(ctrl.Name))
_invalidControls.Add(ctrl.Name, ctrl);//添加到错误列表
HandleSuccess(ctrl);
if (triggerAllInvalidControl && _invalidControls.ContainsKey(ctrl.Name))
_invalidControls.Remove(ctrl.Name);//从错误列表中删除已经验证成功的控件
return result ==
验证某个容器下所有的控件是否合法
/// &summary&
/// 验证某个控件下的所有子控件
/// &/summary&
/// &param name=&ctrls&&The CTRLS.&/param&
/// &returns&&/returns&
public bool Verify(Control.ControlCollection ctrls)
foreach (Control ctrl in ctrls)
if (Ignore(ctrl))
if (IsContainer(ctrl))
if (!Verify(ctrl.Controls))
if (!Verify(ctrl))
验证是否为某个类型
public bool Verify(Control ctrl, string name, VerifyType type)
var handler = GetHandler(ctrl);
if (handler == null) throw new Exception(string.Format(&找不到类型“{0}”的获取值的处理器!&, ctrl.GetType()));
var value = handler.GetValue(ctrl);
if (value == null || string.IsNullOrEmpty(value.ToString()))
if (type.HasFlag(VerifyType.Required))
HandleError(ctrl, string.Format(&{0}不能为空!&, name));
if (type.HasFlag(VerifyType.Number))
if (!ConvtUtil.GetNullable&double&(value).HasValue)
HandleError(ctrl, string.Format(&{0}必须为数字!&, name));
在调用验证方法时传入指定的验证函数
public bool Verify(Control ctrl, string msg, Func&bool& verifyFunc)
var args = OnBeforeVerify(ctrl);
if (args.Canceled)
if (!verifyFunc())
HandleError(ctrl, msg);
HandleSuccess(ctrl);
验证成功时或者失败时的处理
public virtual Validator HandleError(Control ctrl, string errorMsg)
ctrl.Focus();
MessageBoxHelper.ShowWarning(errorMsg);
public virtual Validator HandleSuccess(Control ctrl) { }
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致}

我要回帖

更多关于 lay verify 验证类型 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信