VerifyCode.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?php
  2. namespace app\common\model;
  3. use think\facade\Db;
  4. /**
  5. * ============================================================================
  6. * DSMall多用户商城
  7. * ============================================================================
  8. * 版权所有 2014-2028 长沙德尚网络科技有限公司,并保留所有权利。
  9. * 网站地址: http://www.csdeshang.com
  10. * ----------------------------------------------------------------------------
  11. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
  12. * 不允许对程序代码以任何形式任何目的的再发布。
  13. * ============================================================================
  14. * 数据层模型
  15. */
  16. class VerifyCode extends BaseModel {
  17. public $page_info;
  18. /**
  19. * 获取验证码列表
  20. * @access public
  21. * @author csdeshang
  22. * @param type $condition
  23. * @param type $pagesize
  24. * @param type $order
  25. * @return type
  26. */
  27. public function getVerifyCodeList($condition, $pagesize = '', $order = 'verify_code_id desc') {
  28. if ($pagesize) {
  29. $result = Db::name('VerifyCode')->where($condition)->order($order)->paginate(['list_rows'=>$pagesize,'query' => request()->param()],false);
  30. $this->page_info = $result;
  31. return $result->items();
  32. } else {
  33. return Db::name('VerifyCode')->where($condition)->order($order)->limit(10)->select()->toArray();
  34. }
  35. }
  36. /**
  37. * 取得验证码信息
  38. * @access public
  39. * @author csdeshang
  40. * @param array $condition 检索条件
  41. * @param string $fields 字段
  42. * @param string $order 排序
  43. * @return array
  44. */
  45. public function getVerifyCodeInfo($condition = array(), $fields = '*') {
  46. return Db::name('VerifyCode')->where($condition)->field($fields)->order('verify_code_id desc')->find();
  47. }
  48. /**
  49. * 添加验证码信息
  50. * @access public
  51. * @author csdeshang
  52. * @param array $data 参数数据
  53. * @return type
  54. */
  55. public function addVerifyCode($data) {
  56. return Db::name('VerifyCode')->insertGetId($data);
  57. }
  58. /**
  59. * 编辑验证码信息
  60. * @access public
  61. * @author csdeshang
  62. * @param array $data 更新数据
  63. * @param array $condition 条件
  64. * @return bool
  65. */
  66. public function editVerifyCode($data, $condition = array()) {
  67. return Db::name('VerifyCode')->where($condition)->update($data);
  68. }
  69. /**
  70. * 获取验证码数量
  71. * @access public
  72. * @author csdeshang
  73. * @param array $condition 条件
  74. * @return bool
  75. */
  76. public function getVerifyCodeCount($condition = array()) {
  77. return Db::name('VerifyCode')->where($condition)->count();
  78. }
  79. /*
  80. * 发送频率
  81. * @param int $verify_code_type 验证码类型
  82. * @param int $verify_code_user_type 用户类型
  83. * @return array
  84. */
  85. public function isVerifyCodeFrequant($verify_code_type, $verify_code_user_type) {
  86. $ip = request()->ip();
  87. if ($this->getVerifyCodeCount(array(array('verify_code_ip' ,'=', $ip), array('verify_code_type' ,'=', $verify_code_type), array('verify_code_user_type' ,'=', $verify_code_user_type), array('verify_code_add_time','>', TIMESTAMP - 60)))) {
  88. return ds_callback(false, '请60秒以后再发');
  89. }
  90. if ($this->getVerifyCodeCount(array(array('verify_code_ip' ,'=', $ip), array('verify_code_type' ,'=', $verify_code_type), array('verify_code_user_type' ,'=', $verify_code_user_type), array('verify_code_add_time','>', strtotime(date('Y-m-d 0:0:0'))))) > 15) {
  91. return ds_callback(false, '今天验证码已超15条,不能再发送');
  92. }
  93. return ds_callback(true);
  94. }
  95. /*
  96. * 生成验证码
  97. * @param int $verify_code_type 验证码类型
  98. * @param int $verify_code_user_type 用户类型
  99. * @return array
  100. */
  101. public function genVerifyCode($verify_code_type, $verify_code_user_type) {
  102. $verify_code = str_pad(strval(rand(0, 999999)), 6, '0', STR_PAD_LEFT);
  103. $i = 0;
  104. while ($i < 100 && $this->getVerifyCodeCount(array(array('verify_code' ,'=', $verify_code), array('verify_code_type' ,'=', $verify_code_type), array('verify_code_user_type' ,'=', $verify_code_user_type), array('verify_code_add_time','>', TIMESTAMP - VERIFY_CODE_INVALIDE_MINUTE * 60)))) {
  105. $verify_code = str_pad(strval(rand(0, 999999)), 6, '0', STR_PAD_LEFT);
  106. $i++;
  107. }
  108. if ($i < 100) {
  109. return $verify_code;
  110. }
  111. return false;
  112. }
  113. }
  114. ?>