分类 代码 下的文章

英文与数字可使用substr函数截取。
第一个参数为字符串。第二个参数为开始位数0表示从头开始,-1表示从结尾开始。第三个参数为截取位数。

substr("Hello", 0, 1);
//从头开始截取一位,结果为"H"

substr("Hello", -1, 1);
//从结尾开始截取一位,结果为"o"

中文需要使用mb_substr函数截取,用法同上,只多了一个编码参数(可不填写)。

mb_substr("你好,世界", 0, 1);
//从头开始截取一位,结果为"你"

mb_substr("你好,世界", -1, 1, 'utf-8');
//从结尾开始截取一位,结果为"界"

strpos('字符串', '查找字符串');
//返回值为目标字符串第一次出现的位置(从0开始计数)

echo strpos('Hello World', 'Hello');
//0

echo strpos('Hello World', 'e');
//1

str_replace('要替换的内容', '替换为此内容', '目标字符串');
//返回值为替换后的字符串

echo str_replace('Hello', 'Bye', 'Hello World');
//Bye World

Db.php

<?php    
use PDO;

class Db
{
/*
PDO对象
*/
    protected static $pdo;

/*
配置数组
*/
    protected static $config;

/*
是否开启了事务
*/
    protected static $transaction = false;

/*

执行语句数
*/
    protected static $transaction_exec = 0;

/*
本次事务执行成功语句数
*/
    protected static $transaction_success = 0;

/*
本次事务执行成功并影响了数据的语句数
*/
    protected static $transaction_valid = 0;

/*
初始化
*/
    protected static function init()
    {
        $config = require('config.php');
        self::$config = $config;
        $pdo = new PDO('mysql:host='. $config['location'] .';port='. $config['hostport'] .';dbname='. $config['database'] .';', $config['username'], $config['password']);
        $pdo -> query('set names '. $config['charset']);
        $pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
        $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        self::$pdo = $pdo;
        include ROOT_PATH.'Query.php';
    }

/*
制定表全名并开始查询
table:完整的表名
*/
    public static function table($table)
    {
        if(!self::$pdo) self::init();
        $querier = new Query(self::$pdo);
        return $querier->table($table);
    }

/*
指定不带前缀的表名并开始查询
name:不带前缀的表名
*/
    public static function name($name)
    {
        if(!self::$pdo) self::init();
        $querier = new Query(self::$pdo);
        return $querier->table(self::$config['prefix'].$name);
    }

/*
开启事务
*/
    public static function startTrans()
    {
        self::$transaction = true;
        self::$transaction_exec = 0;
        self::$transaction_success = 0;
        self::$transaction_valid = 0;
        self::$pdo->beginTransaction();
        return true;
    }

/*
提交事务并判断是否回滚

mode:事务模式
0、无条件提交
1、有SQL语句执行失败即回滚
2、有写入操作影响行数为0即回滚
*/
    public static function commit($mode = 1)
    {
        self::$transaction = false;
        switch($mode)
        {
            case 0:
                self::$pdo->commit();
                return true;
            case 1:
                if(self::$transaction_exec === self::$transaction_success){
                    self::$pdo->commit();
                    return true;
                }else{
                    $this->rollback();
                    return false;
                }
                break;
            case 2:
                if(self::$transaction_exec === self::$transaction_success){
                    if(self::$transaction_exec === self::$transaction_valid){
                        self::$pdo->commit();
                        return true;
                    }
                }
                $this->rollback();
                return false;
            default:
                $this->rollback();
                return false;
        }
    }

/*
回滚事务
*/
    public static function rollback()
    {
        self::$pdo->rollBack();
        self::$transaction = false;
        return true;
    }

/*
执行语句数 + 1
*/
    public static function incExecNum()
    {
        self::$transaction_exec++;
    }

/*
执行成功语句数 + 1
*/
    public static function incSuccessNum()
    {
        self::$transaction_success++;
    }

/*
执行成功并影响数据的语句数 + 1
*/
    public static function incValidNum()
    {
        self::$transaction_valid++;
    }

    public static function error()
    {
        print_r(self::$pdo->errorCode());
        print_r(self::$pdo->errorInfo());
    }
}

- 阅读剩余部分 -

过阵子要用,先转载过来存上。

<?php
class IdentityCard
{
    /**
     * 校验身份证号是否合法
     * @param string $num 待校验的身份证号
     * @return bool
     */
    public static function isValid(string $num)
    {
        //老身份证长度15位,新身份证长度18位
        $length = strlen($num);
        if ($length == 15) { //如果是15位身份证

            //15位身份证没有字母
            if (!is_numeric($num)) {
                return false;
            }
            // 省市县(6位)
            $areaNum = substr($num, 0, 6);
            // 出生年月(6位)
            $dateNum = substr($num, 6, 6);

        } else if ($length == 18) { //如果是18位身份证

            //基本格式校验
            if (!preg_match('/^\d{17}[0-9xX]$/', $num)) {
                return false;
            }
            // 省市县(6位)
            $areaNum = substr($num, 0, 6);
            // 出生年月日(8位)
            $dateNum = substr($num, 6, 8);

        } else { //假身份证
            return false;
        }

        //验证地区
        if (!self::isAreaCodeValid($areaNum)) {
            return false;
        }

        //验证日期
        if (!self::isDateValid($dateNum)) {
            return false;
        }

        //验证最后一位
        if (!self::isVerifyCodeValid($num)) {
            return false;
        }

        return true;
    }

    /**
     * 省市自治区校验
     * @param string $area 省、直辖市代码
     * @return bool
     */
    private static function isAreaCodeValid(string $area) {
        $provinceCode = substr($area, 0, 2);

        // 根据GB/T2260—999,省市代码11到65
        if (11 <= $provinceCode && $provinceCode <= 65) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 验证出生日期合法性
     * @param string $date 日期
     * @return bool
     */
    private static function isDateValid(string $date) {
        if (strlen($date) == 6) { //15位身份证号没有年份,这里拼上年份
            $date = '19'.$date;
        }
        $year  = intval(substr($date, 0, 4));
        $month = intval(substr($date, 4, 2));
        $day   = intval(substr($date, 6, 2));

        //日期基本格式校验
        if (!checkdate($month, $day, $year)) {
            return false;
        }

        //日期格式正确,但是逻辑存在问题(如:年份大于当前年)
        $currYear = date('Y');
        if ($year > $currYear) {
            return false;
        }
        return true;
    }

    /**
     * 验证18位身份证最后一位
     * @param string $num 待校验的身份证号
     * @return bool
     */
    private static function isVerifyCodeValid(string $num)
    {
        if (strlen($num) == 18) {
            $factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
            $tokens = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];

            $checkSum = 0;
            for ($i = 0; $i < 17; $i++) {
                $checkSum += intval($num{$i}) * $factor[$i];
            }

            $mod   = $checkSum % 11;
            $token = $tokens[$mod];

            $lastChar = strtoupper($num{17});

            if ($lastChar != $token) {
                return false;
            }
        }
        return true;
    }
}

//测试
$num = '33071919610920021X';
if (IdentityCard::isValid($num)) {
    echo '身份证格式正确';
} else {
    echo '身份证格式不正确';
}

//=============新的18位身份证号码各位的含义:=======================
//1-2位省、自治区、直辖市代码;11-65
//3-4位地级市、盟、自治州代码;
//5-6位县、县级市、区代码;
//7-14位出生年月日,比如19670401代表1967年4月1日;
//15-17位为顺序号,其中17位男为单数,女为双数;
//18位为校验码,0-9和X,由公式随机产生。
//举例:
//130503 19670401 0012这个身份证号的含义: 13为河北,05为邢台,03为桥西区,出生日期为1967年4月1日,顺序号为001,2为验证码
//===========15位身份证号码各位的含义:=======================
//1-2位省、自治区、直辖市代码;
//3-4位地级市、盟、自治州代码;
//5-6位县、县级市、区代码;
//7-12位出生年月日,比如670401代表1967年4月1日,这是和18位号码的第一个区别;
//13-15位为顺序号,其中15位男为单数,女为双数;
//与18位身份证号的第二个区别:没有最后一位的验证码。
//举例:
//130503 670401 001的含义; 13为河北,05为邢台,03为桥西区,出生日期为1967年4月1日,顺序号为001。

转载地址:PHP验证身份证格式 - itbsl - 博客园

时间戳转日期:

$time = time();
$date = date("Y-m-d H:i", $time);

日期转时间戳:

$date = "2020-02-20";
$time = strtotime($date);

添加以下css代码

html {-webkit-filter: grayscale(100%);filter:progid:DXImageTransform.Microsoft.BasicImage(graysale=1);}

如果没有生效修改<!DOCTYPE HTML>标签与标签即可

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

方法非常简单,首先引入 jquery.js 和 jquery.pjax.js

<script src="//cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
<script src="//cdn.bootcss.com/jquery.pjax/1.9.6/jquery.pjax.min.js"></script>

然后在body内放一个div作为容器,并设置一个id,我设置的id是pjax-container

<div id="pjax-container">
  //在此处放置跳转页面时要更新的部分
</div>

然后在容器外添加以下代码

<script type="text/javascript">
  $(document).pjax('a[href^="<?php Helper::options()->siteUrl()?>"]:not(a[no-pjax])', {
    container: '#pjax-container',
    fragment: '#pjax-container',
    timeout: 8000
  }).on('pjax:send', function() { //Pjax加载中执行
    $("#pjax_loading").show(); //显示遮罩层与加载动画
  }).on('pjax:complete', function() { //Pjax加载完成执行
    $("#pjax_loading").hide();  //隐藏遮罩层与加载动画
  });;
</script>

参考文章:https://www.ihewro.com/archives/354/

正常应该绑定事件,试了会没成功,就换了定时检查当前位置的方法

//定时执行,更改按钮状态
setInterval(function(){
  //判断当前位置是否处于顶部,是则显示按钮,否则隐藏
  if($(window).scrollTop() == 0){
    $('#back-top').hide();
  }else{
    $('#back-top').show();
  }
}, 100);

//点击按钮返回顶部
$('#back-top-btn').click(function() {
  $('body,html').animate({
    scrollTop: 0
  },1000);
  return false;
});