精华内容
下载资源
问答
  • 车辆合格证二维码解码
    千次阅读
    2020-10-09 10:37:29
    更多相关内容
  • python实现合格证二维码解密 #!/usr/bin/env python import collections import os import threading import time import webbrowser from flask import (Flask, jsonify, Response, render_template, request) ...

    python实现合格证二维码解密

    #!/usr/bin/env python
    import collections
    import os
    import threading
    import time
    import webbrowser 
    from flask import (Flask, jsonify, Response, render_template, request)
    
    CUR_DIR = os.path.realpath(os.path.dirname(__file__)) 
     
    app = Flask(__name__, static_folder=os.path.join(CUR_DIR, 'static'), template_folder=os.path.join(CUR_DIR, 'templates'))
    app.config.from_object(__name__)
     
    @app.route('/querydata', methods=['GET', 'POST'])
    def querydata():
        if request.method == 'POST':
            import json
            js = json.loads(request.get_data(as_text=True))
    
            data = js['data']
            if data == '':
                return jsonify({"code": -1, "data": "请扫描二维码!"})
        import hgzkey
        try:
            s1 = hgzkey.getdata("", data)
        except Exception as e:
            app.logger.exception(e)
        return jsonify({"code": 0, "data": s1})
    
    
    @app.route('/', methods=['GET', 'POST'])
    def index():
        return render_template('hgz.html')
    
    
    def open_browser_tab(host, port):
        url = 'http://%s:%s' % (host, port)
        def _open_tab(url):
            time.sleep(1.5)
            webbrowser.open_new_tab(url)
    
        thread = threading.Thread(target=_open_tab, args=(url, ))
        thread.daemon = True
        thread.start() 
    
    def main():
        ip = '0.0.0.0'
        port = 8000
        open_browser_tab("127.0.0.1", port)
        app.jinja_env.auto_reload = True
        app.debug = True 
        app.run(host=ip, port=port)
    main()
    

    体验地址:
    http://121.41.179.191:8000/
    在这里插入图片描述

    展开全文
  • 手机扫描二维码使用DroidCam软件实现,DroidCam可以把手机做为二维码采集设备(由于机动车二维码的复杂性,手机摄像头像素越高越好); 首先在安装DroidCam软件的电脑端: DroidCam可以使用wifi/usb两种方式连接手....

    为方便公司开票人员准确快速的开票,通过两周的研究,码出此工具。
    (试用下载地址https://download.csdn.net/download/super_farmers/12264989)
    在此写下实现过程:

    在这里插入图片描述
    在这里插入图片描述
    整个软件分为:
    1.扫描二维码
    手机扫描二维码使用DroidCam软件实现,DroidCam可以把手机做为二维码采集设备(由于机动车二维码的复杂性,手机摄像头像素越高越好);
    首先在安装DroidCam软件的电脑端:
    在这里插入图片描述
    DroidCam可以使用wifi/usb两种方式连接手机,本文中使用wifi连接方式(方便);
    接着安装手机端:
    在这里插入图片描述
    手机端安装好以后可以在电脑端输入手机端显示的IP地址,测试连接是否正常
    在程序中使用下面代码读取摄像头列表会得到:DroidCam字串开头的四个设备,除编号为3的设备,其它均可使用。

        QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
            foreach (const QCameraInfo &cameraInfo, cameras) {
    
                ui->Camera_List->addItem(cameraInfo.description());
            }
    
    获取到设备以后,显示视频及截图代码:
    
    QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
        foreach (const QCameraInfo &cameraInfo, cameras) {
            if (cameraInfo.description() == ui->Camera_List->currentText())
            {
            	// 摄像头实例
                m_Camera = new QCamera(cameraInfo);
    			// 模式、视频采集器
                m_Camera->setCaptureMode(QCamera::CaptureStillImage);
                m_Camera->setViewfinder(m_ViewFinder);
    			// 开始获取视频
                m_Camera->start();
                // 定时器定时截图 m_ImageCapture->capture(QDir::currentPath() + "/code");
                m_Timer->start(2000);
    
                // 截图
                m_ImageCapture = new QCameraImageCapture(m_Camera);
                m_ImageCapture->setCaptureDestination(QCameraImageCapture::CaptureToFile);
                // 由slot_imageSaved槽处理截取的图像
                connect(m_ImageCapture, SIGNAL(imageSaved(int,QString)), this, SLOT(slot_imageSaved(int,QString)));
            }
        }
    
    至此扫码功能实现完成。
    

    2.识别二维码
    Qt识别二维码有QZxing库(),经测试,这个库对机动车二维码无能为力,最终选择一个商业二维码识别控件PsyQrDcd这个要注册授权的,不然识别出只有"AAAAA…"(http://www.psytec.co.jp/),这个识别率很高,速度也非常快。在这一步由于使用第三方库,没什么好说的,使用函数DecodePictureFile设置二维码文件路径,GetDecodeData函数读取结果。
    3.数据解密
    这一步是本软件最核心的一步,因防伪等各种原因,二维码读取到的内容为des加密后base64编码的一串文本。解码不了数据,一切白搭。这里可以调用大神做的接口,没有解密能力的可以参考(https://vehcode.scznnet.cn:449/QRcodeDoc.html#15614)。调用接口需要编译了openssl的Qt版本,因为接口是https协议的,我之前编译的Qt没有openssl,重新编译了下QT(好崩溃,需要静态编译的同学编译openssl一定不要加–debug选项,不然你得重编译);数据解密后得到64个字段,开具发票只用到其中10个字段(生产企业名称|车辆类型|车辆型号|产地|合格证号|发动机号码|车辆识别号VIN|吨位|限乘人数|车辆名称),其中车辆类型对应开票系统中产品分类名称,用此名称从产品分类名称中获取分类编码,这个分类编译在生成发票的时候要用。
    4.生成发票
    依照《增值税发票税控开票软件数据接口规范3.0》中描述的机动车发票导入接口生成XML文档,模板如下:

    <?xml version="1.0" encoding="gbk"?>
    <business>
      <body>
        <djh>djh</djh>                    	//单据号(30字符)
    	<bmb_bbh>bmb_bbh</bmb_bbh>     		//编码表版本号(20个字符)
        <fpdm>fpdm</fpdm>                	//发票代码(10个字符)
        <fphm>fphm</fphm>                	//发票号码(8个字符)
        <gfdwmc>gfdwmc</gfdwmc>         	//购方单位名称(72个字符)
        <sfzhm>sfzhm</sfzhm>            	//身份证号码/组织机构代码(22个字符)
        <gfdwsbh>gfdwsbh</gfdwsbh>     		//购方单位识别号(20个字符)
        <cllx>cllx</cllx>                	//车辆类型(40个字符)
        <cpxh>cpxh</cpxh>                	//厂牌型号(60个字符)
        <cd>cd</cd>                       	//产地(32个字符)
        <hgzh>hgzs</hgzh>                	//合格证书(50个字符)
        <jkzmsh>jkzmsh</jkzmsh>         	//进口证明书号(36个字符)
        <sjdh>sjdh</sjdh>                	//商检单号(32个字符)
        <fdjhm>fdjhm</fdjhm>            	//发动机号码(60个字符)
    	<clsbdh>clsbdh</clsbdh>         	//车辆识别代号(23个字符)
    	<scqymc>scqymc</scqymc>         	//生产企业名称(80个字符)
        <jshj>jshj</jshj>                	//价税合计
        <dh>dh</dh>                       	//电话(40个字符)
        <zh>zh</zh>                       	//账号(40个字符)
        <dz>dz</dz>                       	//地址(80个字符)
        <khyh>khyh</khyh>                	//开户银行(80个字符)
        <zzssl>zzssl</zzssl>            	//增值税税率(实际税率)
        <zzsse>zzsse</zzsse>            	//增值税税额
        <bhsj>bhsj</bhsj>                	//不含税价
        <dw>dw</dw>                       	//吨位(8个字符)
    	<xcrs>xcrs</xcrs>                	//限乘人数(12个字符)
    	<spbm> spbm</spbm>					//商品编码(19个字符)
    	<zxbm>zxbm </zxbm>					//自行编码(20个字符)
    	<yhzcbs>yhzcbs</yhzcbs>				//优惠政策标识(1个字符)  0:不使用,1:使用
    	<lslbs>lslbs</lslbs> 				//税率标识空(1个字符):非零税率,0:出口退税,1:免税,2:不征收,3普通零税率
    	<zzstsgl>zzstsgl</zzstsgl>			//增值税特殊管理(50个字符)
      </body>
    </business>
    
    单据号可自定义;编码版本为税收分类编码的版本号,可以在最新税收分类编码文档中获取,发票代码,发票号码留空,增值税税率(13% 要填入 0.13)
    这里有个小写金额转大写的功能,,自行实现耗时一下午(开始想的太简单了)只实现 了最大千亿的转换(应该够了吧),代码奉上:
    
    QString Invoice::AmountsConverted(double amount)
    {
        QStringList cnNumber = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    
        // 拆分整数与小数部分
        QString strAmount, strInteger, strDecimal;  // 金额字符串, 整数部分, 小数部分
        strAmount.setNum(amount, 'f', 2);
        strInteger = strAmount.split('.').at(0);
        strDecimal = strAmount.split('.').at(1);
    
        QStringList strlInteger, strlDecimal;
        strlInteger = strInteger.split("");
        strlInteger.removeFirst(); strlInteger.removeLast();    //移除首尾空值
        strlDecimal = strDecimal.split("");
        strlDecimal.removeFirst(); strlDecimal.removeLast();    //移除首尾空值
    
    
        // 构建汉字列表
        QStringList strlCnInteger, strlCnDecimal;
        foreach (QString str, strlInteger) {
            strlCnInteger << cnNumber.at(str.toInt());
        }
        foreach (QString str, strlDecimal) {
            strlCnDecimal << cnNumber.at(str.toInt());
        }
    
        // 整数部分添加单位
        int nCount = strlInteger.size() - 1;     // 总共多少位
        bool yflag = false, sflag = false, bflag = false, qflag = false, wflag = false;
        int nStep = 0;
        for(int i = nCount; i >= 0; i--)
        {
            switch (nStep++)
            {
            case 0:         // 元
                if (strlInteger.at(i) == "0") strlCnInteger.removeAt(i);
                else
                    yflag = true;
                break;
            case 1:         // 拾
                if (strlInteger.at(i) == "0")
                {
                    if (!yflag)
                        strlCnInteger.removeAt(i);
                }
                else if (strlInteger.at(i) != "0")
                    strlCnInteger.insert(i + 1, "拾"), sflag = true;
                break;
            case 2:         // 百
                if (strlInteger.at(i) == "0")
                {
                    if (!yflag && !sflag)
                        strlCnInteger.removeAt(i);
                    if (yflag && !sflag)
                        strlCnInteger.removeAt(i);
                }
                else if (strlInteger.at(i) != "0")
                    strlCnInteger.insert(i + 1, "佰"), bflag = true;
                break;
            case 3:         // 仟
                if (strlInteger.at(i) == "0")
                {
                    if (!yflag && !sflag && !bflag)
                        strlCnInteger.removeAt(i);
                    if ((yflag || sflag) && !bflag)
                        strlCnInteger.removeAt(i);
                }
                else if (strlInteger.at(i) != "0")
                    strlCnInteger.insert(i + 1, "仟"), qflag = true;
                break;
            case 4:         // 万
                if (!wflag)
                {
                    if (strlInteger.at(i) == "0")
                    {
                        if (!qflag)
                            strlCnInteger.removeAt(i);
                        strlCnInteger.insert(i, "万");
                        yflag = false;
                        wflag = true;
                    }
                    else
                        strlCnInteger.insert(i + 1, "万"), yflag = true, wflag = true;
                }
                else        // 亿
                {
                    if (strlInteger.at(i) == "0")
                    {
                        strlCnInteger.removeAt(i);
                        strlCnInteger.insert(i, "亿");
                        yflag = false;
                    }
                    else
                        strlCnInteger.insert(i + 1, "亿"), yflag = true;
                }
                nStep = 1; sflag = bflag = qflag = false;
                break;
            }
        }
    
        // 小数部分添加单位
        // 分
        if (strlDecimal.at(1) == "0")
        {
            strlCnDecimal.removeAt(1);
        }
        else
        {
            strlCnDecimal.insert(2, "分");
        }
        // 角
        if (strlDecimal.at(0) == "0")
        {
            if (strlDecimal.at(1) == "0")
                strlCnDecimal.removeAt(0);
        }
        else
        {
            strlCnDecimal.insert(1, "角");
        }
    
        QString result = strlCnInteger.join("") + "圆" + strlCnDecimal.join("") + "整";
        return result;
    }
    
    

    5.开票导入:
    这里没什么说的,生成发票XML后,在开票界面导入就成。

    X.openssl des加解密的学习:
    在openssl中以evp模式使用des等加解密方便快捷,但一定要注意数据类型的转换,简要代码如下:

    // 生成key及iv  len为返回key的长度,
    int len = EVP_BytesToKey(/*方式*/, /*hex*/, NULL, /*密钥*/, /*密钥长度*/, /*强度*/, key, iv);
    
    // ctx上下文结构申请内存 (在构造函数中)
    m_evp_ctx = EVP_CIPHER_CTX_new();
    
    // 加解密过程
    
    // 释放dtx上下文结构内存 (在析构函数中)
    EVP_CIPHER_CTX_free(m_evp_ctx);
    
    // 加密
    QString Common::des_EnCrypto(QString Text)
    {
        QByteArray bText = Text.toUtf8();
    
        unsigned char *inText = (unsigned char*)bText.data();
        int inTextLen = bText.length();
    
        unsigned char *outText = (unsigned char*)malloc(inTextLen + 8);
        int outLen, outFinalLent, outTotalLen;
    
        EVP_CIPHER_CTX_reset(m_evp_ctx);
    
        int ret = EVP_EncryptInit(m_evp_ctx, EVP_des_cbc(), m_des_key, m_des_iv);
        if (ret != 1)
        {
            EVP_CIPHER_CTX_reset(m_evp_ctx);
            return QString();
        }
    
        ret = EVP_EncryptUpdate(m_evp_ctx, outText, &outLen, inText, inTextLen);
        if (ret != 1)
        {
            EVP_CIPHER_CTX_reset(m_evp_ctx);
            return QString();
        }
        else
        {
            EVP_EncryptFinal(m_evp_ctx, outText + outLen, &outFinalLent);
            outTotalLen = outLen + outFinalLent;
        }
    
        EVP_CIPHER_CTX_reset(m_evp_ctx);
    
        return QString::fromUtf8(QByteArray((char*)outText, outTotalLen).toHex());
    }
    
    
    // 解密
    QString Common::des_DeCrypto(QString Text)
    {
        QByteArray bText = QByteArray::fromHex(Text.toUtf8());
        unsigned char *inText = (unsigned char*)bText.data();
        int inTextLen = bText.length();
    
        unsigned char *outText = (unsigned char*)malloc(inTextLen + 8);
        int outLen, outFinalLent, outTotalLen;
    
        EVP_CIPHER_CTX_reset(m_evp_ctx);
    
        int ret = EVP_DecryptInit(m_evp_ctx, EVP_des_cbc(), m_des_key, m_des_iv);
        if (ret != 1)
        {
            EVP_CIPHER_CTX_reset(m_evp_ctx);
            return QString();
        }
    
        ret = EVP_DecryptUpdate(m_evp_ctx, outText, &outLen, inText, inTextLen);
        if (ret != 1)
        {
            EVP_CIPHER_CTX_reset(m_evp_ctx);
            return QString();
        }
        else
        {
            EVP_DecryptFinal(m_evp_ctx, outText + outLen, &outFinalLent);
            outTotalLen = outLen + outFinalLent;
        }
    
        EVP_CIPHER_CTX_reset(m_evp_ctx);
    
        return QString::fromUtf8((char*)outText, outTotalLen);
    }
    
    展开全文
  • 二维码现在越来越流行,可以使用手机上或其它移动终端上的二维码扫描器软件对着二维码一扫,就可以得到相关信息。在互联网站上,可以找到很多二维码的工具,甚至还有不少在线生成、解析二维码的网站。在业务系统当中...

    二维码现在越来越流行,可以使用手机上或其它移动终端上的二维码扫描器软件对着二维码一扫,就可以得到相关信息。在互联网站上,可以找到很多二维码的工具,甚至还有不少在线生成、解析二维码搜索的网站。在业务系统当中,比如档案管理系统中,以前一般都是通过条形码(一维码)来存储档案职工的基本信息,但是存储容量有限。而现在完全可以使用二维码存储更多容量的信息。
    我们这里使用了ThoughtWorks.QRCode.dll这个类库,在asp.net项目中引用这个dll文件,就可以使用相关API进行开发。

    比如,我们封装了一个最精简的类:


    帮助类:

    [csharp]
            /// <summary>  
            /// 搜索二维码助手类 
            /// /// </summary>  
            /// public class QRCodeOp  {      
            /// <summary>      
            /// 生成二维码      
            /// </summary>      
            /// <param name="qrCodeContent">要编码的内容</param>      
            // <returns>返回二维码位图</returns>      
            public static Bitmap QRCodeEncoderUtil(string qrCodeContent)
            {
                QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
                qrCodeEncoder.QRCodeVersion = 0;
                Bitmap img = qrCodeEncoder.Encode(qrCodeContent, Encoding.UTF8);//指定utf-8编码, 支持中文          
                return img;
            }
    
            /// <summary>      
            /// 解析二维码      
            /// </summary>      
            /// <param name="bitmap">要解析的二维码位图</param>      
            /// <returns>解析后的字符串</returns>     
            public static string QRCodeDecoderUtil(Bitmap bitmap)
            {
                QRCodeDecoder decoder = new QRCodeDecoder();
                string decodedString = decoder.decode(new QRCodeBitmapImage(bitmap), Encoding.UTF8);//指定utf-8编码, 支持中文          
                return decodedString;
            }
    View Code


    测试:

     [csharp]
            protected void EncodeClick(object sender, DirectEventArgs e)
            {
                StringBuilder sb = new StringBuilder(); sb.Append(tf6_PERSONIDNUM.Text.Trim() + ";");//个人身份证号      
                sb.Append(tf_DAID.Text.Trim() + ";"); sb.Append(tf_DANAME.Text.Trim() + ";");
                sb.Append(cb_DABUSKIND.Text.Trim() + ";"); sb.Append(cb_DAKIND.Text.Trim() + ";");
                sb.Append(cb_DALEVELCODE.Text.Trim() + ";"); sb.Append(df_DABUILDTIME.Text.Trim() + ";");
                sb.Append(tf_DAORG.Text.Trim() + ";"); sb.Append(cb_DASTATUS.Text.Trim() + ";");
                sb.Append(tf_DABUILDER.Text.Trim() + ";"); sb.Append(tf_DABUILDORG.Text.Trim() + ";");
                Bitmap bitmap = QRCodeOp.QRCodeEncoderUtil((sb.ToString().Trim()));//调用二维码编码方法生成位图      
                string fileName = Server.MapPath("~") + "Images\\QRImages\\" + tf6_PERSONIDNUM.Text.Trim() + ".jpg"; bitmap.Save(fileName);//保存位图,文件名为个人身份证号      
                this.QRCodeImage.ImageUrl = "~/Images/QRImages/" + tf6_PERSONIDNUM.Text.Trim() + ".jpg";//显示图片      
                X.Msg.Alert("二维码信息", QRCodeOp.QRCodeDecoderUtil(bitmap)).Show();//调用二维码解码方法弹出编码之前的信息  
            }
            //这里我在项目中用的是Ext.NET组件。X.Msg.Alert和QRCodeImage.ImageUrl以及DicrectEventArgs这些并不是很重要,感兴趣的读者可以去ext.net网站查阅ext.net的相关知识。
    View Code

     

    转载于:https://www.cnblogs.com/yuhanzhong/p/3806459.html

    展开全文
  • 牛逼!Java 从入门到精通,超全汇总版

    万次阅读 多人点赞 2021-05-06 19:40:33
    就这一张图,如果你能把图中内容都理解的差不多,那你就可以说是入门 Java 了,但是这里要注意一个概念,这并不等于说你是一个合格的初级 Java 程序员了,因为要想达到初级 Java 程序员的水平,你要会能干活,能...
  • 将物联网技术应用到生鲜农产品冷链物流体系建设中,有助于破解当前冷链物流中断频发的难题,对于确保生鲜农产品质量安全、稳定农产品价格具有重要意义。本文从政府监管部门、冷链相关企业和消费者的功能需求出发,构建...
  • 订阅方法:方式1:扫描下面二维码,进入《预训练周刊》主页,选择“关注TA”。方式2:点击本文下方的“阅读原文”,进入《预训练周刊》Hub社区版,根据内附的详细订阅步骤,完成订阅。关于周刊本期周刊,我们选择了...
  • https://www.apishop.net/#/api/detail/?productID=206 车牌识别:https://www.apishop.net/#/api/detail/?productID=207 《机动车合格证二维码解码:https://www.apishop.net/#/api/detail/?productID=216 5、⭐ ...
  • 得益于盛大创新院良好的技术创新氛围以及相对优厚的待遇,我组建了一个非常优秀的团队,有玩Linux的,有精通图形引擎的,有精通软件工程的,有精通多媒体编解码的,也有擅长系统安全的,共十多个人,用一年多时间...
  • BART中文摘要生成,(nplcc与LCSTS数据集)

    千次阅读 多人点赞 2021-10-29 15:47:38
    with_generate=True, logging_dir="logs", logging_steps=500, evaluation_strategy="epoch", save_total_limit=3, # generation_max_length最大生成长度,系统默认20 generation_num_beams=1表示贪心解码,大于1为...
  • (8)通过本功能发布外部网站信息或商品,包括但不限于社交、导购、团购、促销、购物平台等外部网站或APP的名称、超链接、二维码、LOGO、联系帐号等信息; (9)通过本功能引导包括但不限于第三方平台或账户、银行...
  • 可验证性:指信息的主要质量属性可以被证实或者伪的程度。 安全性:指在信息的生命周期中,信息可以被非授权访问的可能性,可能性越低,安全性越高。 3. 信息传输模型 信息只有流动起来才能体现其价值,信息的...
  • API接口整理

    2020-08-07 19:28:39
    https://www.apishop.net/#/api/detail/?productID=206 车牌识别:https://www.apishop.net/#/api/detail/?productID=207 《机动车合格证二维码解码:https://www.apishop.net/#/api/detail/?productID=216 交通...
  • 尽管该模型可以在测试集(其预处理方式与训练集相同)上取得合格的性能,但它并不能很好地泛化到数据集之外的图像,这很可能是因为其他图像质量、填充和字体大小与数据集中的图像不同。 使用相同数据集尝试解决相同...
  • 条码可分为一维条码 (One Dimensional Barcode, 1D) 和二维码(Two Dimensional Code, 2D)两大类,目前在商品上的应用仍以一维条码为主,故一维条码又被称为商品条码,二维码则是另一种渐受重视的条码,其功能较一维...
  • 例如,检测系统为汽水瓶拍照,然后根据合格 - 不合格标准分析图像,以确定瓶子是否被正确地填充。 视频监控 — 视频跟踪和运动目标跟踪 这涉及到在视频中定位移动物体。其用途包括安全和监视、交通控制、人机交互和...
  • 因为条码具有上述迅速,准确,廉价,使用方便,适应性强等优点,克服了其他输入方法的不足,所以他在各个行业中的发展可谓突飞猛进,最初应用于物流管理,最引人注目的是pos系统,它使商店的定货管理,盘点,库存...
  • 记录一些开放API

    2020-08-21 10:00:43
    https://www.apishop.net/#/api/detail/?productID=206 车牌识别:https://www.apishop.net/#/api/detail/?productID=207 《机动车合格证二维码解码:https://www.apishop.net/#/api/detail/?productID=216 淘宝...
  • Air系列模块常见问题列表

    万次阅读 2021-04-26 15:24:42
    29.1、如何支持UI显示 29.2、为什么lcd不显示 29.3、最大支持的lcd分辨率是多少 29.4、如何使用自定义字体 29.5、为什么图片无法显示 29.6、如何显示二维码 29.7、如何显示Code128条形码 三十、FLASH和RAM使用问题...
  • 第一章 信息化与信息系统 1. 信息系统与信息化 1.1 信息的基本概念 1.1.1 什么是信息 香农指出,信息就是能够用来消除不确定性的东西。 1.1.2 信息质量属性 ...⑥ 可验证性:指信息的主要质量属性可以被
  • //pwd 不需要再手动utf-8解码了 , 直接解密就好 String _pwd = AESUtils.AES_Decrypt(pwd, SALT_2, AESEncryptMode); String _secret = ""; try { _secret = HMACSHA256.generate(time + _pwd, SALT_1); } catch ...
  • 《机动车合格证二维码解码:https://www.apishop.net/#/api/detail/?productID=216 交通出行 公交及站点查询:https://apistore.eolinker.com/#/api/detail/?productID=77 经纬度地址转换:...
  • 作为低功耗蓝牙技术领域的领先企业,Packetcraft可以提供先进的、开放的、经商业验证的合格软件和服务。2020年3月,Packetcraft成为全球首家通过蓝牙5.2规范认证的公司,其主协议栈和链路层可支持低功耗同步通道(LE...
  • vue 官方推荐的好用的三方库

    万次阅读 2020-12-31 21:47:13
    树 图形 社交分享 二维码 搜索 杂 标签 形成 电话号码输入格式器 密码输入 选择器 发电机 日期选择器 选择 滑杆 拖放 自动完成 类型选择 颜色选择器 开关 屏蔽输入 富文本编辑 图像处理 视频操纵 上传文件 上下文...
  • 该插件支持字符串的编解码、JSON 串的格式化、代码美化、二维码生成器、页面滚动截屏、图片转 Base64 、简易 Postman、Ajax 调试等功能。 虽然名叫 “前端插件助手”,其实该插件对我们后端开发帮助也极大。 4.3.4 ...
  • 2020-09-14

    2020-09-14 12:49:32
    该插件支持字符串的编解码、JSON串的格式化、代码美化、二维码生成器、页面滚动截屏、图片转Base64 、简易 Postman、Ajax 调试等功能。 虽然名叫“前端插件助手”,其实该插件对我们后端开发帮助也极大。 4.3.4 ...
  • 物联网工程知识点

    千次阅读 2020-10-07 20:04:07
    物联网是指将各种实时信息获取设备或设备集合体,如传感网、射频标签阅读装置、条码与二维码设备、仪表、全球定位系统和其它基于物一物通信模式的短距无线自组织网络,通过各种接入网与互联网、广电网或电信网结合...
  • https://www.apishop.net/#/api/detail/?productID=206 车牌识别:https://www.apishop.net/#/api/detail/?productID=207 《机动车合格证二维码解码:https://www.apishop.net/#/api/detail/?productID=216 交通...

空空如也

空空如也

1 2 3 4 5
收藏数 91
精华内容 36
关键字:

车辆合格证二维码解码