当前位置: 首页 > news >正文

百度OCR身份证识别C++离线SDKV3.0 C#对接

 百度OCR身份证识别C++离线SDKV3.0 C#对接

目录

说明

效果

问题 

项目

代码

下载


说明

自己根据SDK封装了动态库,然后C#调用。

SDK 简介

        本 SDK 适应于于 Windows 平台下的⾝份证识别系统,⽀持 C++接⼜开发的 SDK,开发者可在VS2015 下⾯进⾏开发(推荐使⽤,不保证其他版本 VS 都兼容)。SDK 采⽤ C++的动态库 DLL 的⽅式,另外随 SDK 附带⼀个鉴权激活⼯具(LicenseTool.exe,在license_tool ⽬录),通过该激活⼯具可⽣成正常接 ⼊SDK 的激活 license ⽂件 license.zip(解压后可⽣成两个⽂件 license.ini 和license.key)达到通过鉴权, 正常使⽤SDK 的⽬的。

激活工具授权

        鉴权采⽤ SDK 附带的鉴权⼯具 LicenseTool.exe、双击打开 exe 后,输⼊申请获取到的授权序列号,执⾏按钮激活后会⽣成⼀个 license.zip ⽂件,把这个⽂件解压后会⽣成 license.ini 和 license.key两个⽂件,把这 2 个⽂件放置到 SDK 的 license ⽂件夹,即可通过授权激活。另外⽀持鉴权⽂件路径定制化及模型⽂件路径定制化,可参考 SDK 示例(鉴权⽂件 license.key 和 license.ini 的路径可参考SDK 代码示例,也可以⽤ SDK 现成的默认路径)。鉴权⼯具 LicenseTool.exe 如下所示,在⼯具中输⼊申请得到的 license 系列号即可⽣成鉴权 zip ⽂件。解压 zip 后可⽣成 license.ini 和 license.key 两个⽂件。

SDK包结构

效果

问题 

返回的坐标位置有问题,猜测可能是内部缩放了图片导致,后续等官方修复。

项目

代码

using Newtonsoft.Json;
using OpenCvSharp;
using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;
using WinFormTest.Common;namespace WinFormTest
{public partial class Form1 : Form{public Form1(){InitializeComponent();}IntPtr IDCard;int res = -1;private void Form1_Load(object sender, EventArgs e){IDCard = Native.create();string key = "";string licenseKeyPath = Application.StartupPath + "\\license\\license.key";string licenseFile = Application.StartupPath + "\\license\\license.ini";key = File.ReadAllText(licenseKeyPath);res = Native.auth_from_file(IDCard, key, licenseFile, false);string model_folder = Application.StartupPath + "\\resource";res = Native.sdk_init(IDCard, model_folder);image_path = Application.StartupPath + "\\idcard_.jpg";pictureBox1.Image = new Bitmap(image_path);}private void button1_Click(object sender, EventArgs e){if (image_path == ""){return;}textBox1.Text = "";Application.DoEvents();Mat image = new Mat(image_path);StringBuilder ocr_result1 = new StringBuilder(1024);StringBuilder ocr_result2 = new StringBuilder(2048);Stopwatch stopwatch = new Stopwatch();stopwatch.Start();res = Native.ocr2(IDCard, image.CvPtr, ocr_result1, ocr_result2);string s = ocr_result1.ToString();string s2 = ocr_result2.ToString();stopwatch.Stop();double totalTime = stopwatch.Elapsed.TotalSeconds;textBox1.Text += $"耗时: {totalTime:F2}s";textBox1.Text += "\r\n-------------------\r\n";if (res == 0){Object jsonObject = JsonConvert.DeserializeObject(ocr_result1.ToString());textBox1.Text += JsonConvert.SerializeObject(jsonObject, Newtonsoft.Json.Formatting.Indented);textBox1.Text += "\r\n-------------------\r\n";Object jsonObject2 = JsonConvert.DeserializeObject(ocr_result2.ToString());textBox1.Text += JsonConvert.SerializeObject(jsonObject2, Newtonsoft.Json.Formatting.Indented);IDCardRes iDCardResponse = JsonConvert.DeserializeObject<IDCardRes>(ocr_result1.ToString());IDCardCoordRes iDCardCoordResponse = JsonConvert.DeserializeObject<IDCardCoordRes>(ocr_result2.ToString());//if (iDCardResponse.name == "") iDCardCoordResponse.name_coord = "";//if (iDCardResponse.gender == "") iDCardCoordResponse.gender_coord = "";//if (iDCardResponse.ethnicity == "") iDCardCoordResponse.ethnicity_coord = "";//if (iDCardResponse.birth == "") iDCardCoordResponse.birth_coord = "";//if (iDCardResponse.address == "") iDCardCoordResponse.address_coord = "";//if (iDCardResponse.id_number == "") iDCardCoordResponse.id_number_coord = "";//if (iDCardResponse.authority == "") iDCardCoordResponse.authority_coord = "";//if (iDCardResponse.issuing_date == "") iDCardCoordResponse.issuing_date_coord = "";//if (iDCardResponse.expiry_date == "") iDCardCoordResponse.expiry_date_coord = "";if (iDCardResponse.name != ""){DrawRes(image, iDCardCoordResponse.name_coord);}if (iDCardResponse.gender != ""){DrawRes(image, iDCardCoordResponse.gender_coord);}if (iDCardResponse.ethnicity != ""){DrawRes(image, iDCardCoordResponse.ethnicity_coord);}if (iDCardResponse.birth != ""){DrawRes(image, iDCardCoordResponse.birth_coord);}if (iDCardResponse.address != ""){DrawRes(image, iDCardCoordResponse.address_coord);}if (iDCardResponse.id_number != ""){DrawRes(image, iDCardCoordResponse.id_number_coord);}if (iDCardResponse.authority != ""){DrawRes(image, iDCardCoordResponse.authority_coord);}if (iDCardResponse.issuing_date != ""){DrawRes(image, iDCardCoordResponse.issuing_date_coord);}if (iDCardResponse.expiry_date != ""){DrawRes(image, iDCardCoordResponse.expiry_date_coord);}if (pictureBox1.Image != null){pictureBox1.Image.Dispose();pictureBox1.Image = null;}pictureBox1.Image = new Bitmap(image.ToMemoryStream());image.Dispose();}else{textBox1.Text = "识别失败";}}void DrawRes(Mat res_image, string ptsStr){string[] pts = ptsStr.Split(' ');//多边形的顶点OpenCvSharp.Point[] points = new OpenCvSharp.Point[]{new OpenCvSharp.Point(Convert.ToDouble( pts[0]), Convert.ToDouble( pts[1])),new OpenCvSharp.Point(Convert.ToDouble( pts[2]), Convert.ToDouble( pts[3])),new OpenCvSharp.Point(Convert.ToDouble( pts[4]), Convert.ToDouble( pts[5])),new OpenCvSharp.Point(Convert.ToDouble( pts[6]), Convert.ToDouble( pts[7])),};// 绘制多边形Cv2.Polylines(res_image, new OpenCvSharp.Point[][] { points }, isClosed: true, color: new Scalar(0, 255, 0), thickness: 3);}void DrawRes2(Mat res_image, float[] pts){//多边形的顶点OpenCvSharp.Point[] points = new OpenCvSharp.Point[]{new OpenCvSharp.Point(pts[0], pts[1]),new OpenCvSharp.Point(pts[2], pts[3]),new OpenCvSharp.Point(pts[4], pts[5]),new OpenCvSharp.Point(pts[6], pts[7]),};// 绘制多边形Cv2.Polylines(res_image, new OpenCvSharp.Point[][] { points }, isClosed: true, color: new Scalar(0, 255, 0), thickness: 3);}string fileFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";string image_path = "";private void button2_Click(object sender, EventArgs e){OpenFileDialog ofd = new OpenFileDialog();ofd.Filter = fileFilter;if (ofd.ShowDialog() != DialogResult.OK) return;pictureBox1.Image = null;image_path = ofd.FileName;pictureBox1.Image = new Bitmap(image_path);textBox1.Text = "";}private void button3_Click(object sender, EventArgs e){if (image_path == ""){return;}textBox1.Text = "";Application.DoEvents();Mat image = new Mat(image_path);IDCardResponse final_result = new IDCardResponse();Stopwatch stopwatch = new Stopwatch();stopwatch.Start();res = Native.ocr(IDCard, image.CvPtr, ref final_result);stopwatch.Stop();double totalTime = stopwatch.Elapsed.TotalSeconds;textBox1.Text += $"耗时: {totalTime:F2}s";textBox1.Text += "\r\n-------------------\r\n";IDCardRes iDCardResponse = new IDCardRes();iDCardResponse.name = Encoding.UTF8.GetString(final_result.name).Replace("\u0000", "");iDCardResponse.gender = Encoding.UTF8.GetString(final_result.gender).Replace("\u0000", "");iDCardResponse.ethnicity = Encoding.UTF8.GetString(final_result.ethnicity).Replace("\u0000", "");iDCardResponse.birth = Encoding.UTF8.GetString(final_result.birth).Replace("\u0000", "");iDCardResponse.address = Encoding.UTF8.GetString(final_result.address).Replace("\u0000", "");iDCardResponse.id_number = Encoding.UTF8.GetString(final_result.id_number).Replace("\u0000", "");iDCardResponse.authority = Encoding.UTF8.GetString(final_result.authority).Replace("\u0000", "");iDCardResponse.issuing_date = Encoding.UTF8.GetString(final_result.issuing_date).Replace("\u0000", "");iDCardResponse.expiry_date = Encoding.UTF8.GetString(final_result.expiry_date).Replace("\u0000", "");textBox1.Text += JsonConvert.SerializeObject(iDCardResponse, Newtonsoft.Json.Formatting.Indented);textBox1.Text += "\r\n-------------------\r\n";IDCardCoordRes2 iDCardCoordRes2 = new IDCardCoordRes2();iDCardCoordRes2.name_coord = final_result.name_coord;iDCardCoordRes2.gender_coord = final_result.gender_coord;iDCardCoordRes2.birth_coord = final_result.birth_coord;iDCardCoordRes2.address_coord = final_result.address_coord;iDCardCoordRes2.id_number_coord = final_result.id_number_coord;iDCardCoordRes2.ethnicity_coord = final_result.ethnicity_coord;iDCardCoordRes2.authority_coord = final_result.authority_coord;iDCardCoordRes2.issuing_date_coord = final_result.issuing_date_coord;iDCardCoordRes2.expiry_date_coord = final_result.expiry_date_coord;textBox1.Text += JsonConvert.SerializeObject(iDCardCoordRes2, Newtonsoft.Json.Formatting.Indented);DrawRes2(image, iDCardCoordRes2.name_coord);DrawRes2(image, iDCardCoordRes2.gender_coord);DrawRes2(image, iDCardCoordRes2.birth_coord);DrawRes2(image, iDCardCoordRes2.address_coord);DrawRes2(image, iDCardCoordRes2.id_number_coord);DrawRes2(image, iDCardCoordRes2.ethnicity_coord);DrawRes2(image, iDCardCoordRes2.authority_coord);DrawRes2(image, iDCardCoordRes2.issuing_date_coord);DrawRes2(image, iDCardCoordRes2.expiry_date_coord);if (pictureBox1.Image != null){pictureBox1.Image.Dispose();pictureBox1.Image = null;}pictureBox1.Image = new Bitmap(image.ToMemoryStream());image.Dispose();}}
}

下载

C++封装源码下载

C#调用源码下载

SDK下载

相关文章:

百度OCR身份证识别C++离线SDKV3.0 C#对接

百度OCR身份证识别C离线SDKV3.0 C#对接 目录 说明 效果 问题 项目 代码 下载 说明 自己根据SDK封装了动态库&#xff0c;然后C#调用。 SDK 简介 本 SDK 适应于于 Windows 平台下的⾝份证识别系统,⽀持 C接⼜开发的 SDK,开发者可在VS2015 下⾯进⾏开发&#xff08;推荐…...

Web前端 Javascript笔记1

为什么学习 JavaScript? JavaScript 是 web 开发人员必须学习的 3 门语言中的一门&#xff1a; HTML 定义了网页的内容CSS 描述了网页的布局JavaScript 控制了网页的行为 JavaScript 是可插入 HTML 页面的编程代码。 JavaScript 插入 HTML 页面后&#xff0c;可由所有的现代浏…...

Git回滚版本并push到远端master

1、查看日志 git log 2、还原最近的版本 () --git reset --hard commit-id 如&#xff1a;git reset --hard d84da14bf2743683eca7a015f56114faaa344f42 3、覆盖分支版本 git push -f origin dev 回滚本地master完成后&#xff0c;将回滚后的代码push到远端master&#xf…...

MAC: 自己制作https的ssl证书(自己签发免费ssl证书)(OPENSSL生成SSL自签证书)

MAC: 自己制作https的ssl证书(自己签发免费ssl证书)(OPENSSL生成SSL自签证书) 前言 现在https大行其道, ssl又是必不可少的环节. 今天就教大家用开源工具openssl自己生成ssl证书的文件和私钥 环境 MAC电脑 openssl工具自行搜索安装 正文 1、终端执行命令 //生成rsa私钥&…...

mac配置Jmeter环境

mac配置Jmeter环境 一、安装jmeter二、Jmeter目录结构三、汉化Jmeter四、改变主题外观五、jmeter安装第三方插件六、jmeter基础入门案例 一、安装jmeter 第一步先自行配置好电脑的jdk环境 1、官网下载jar包 https://jmeter.apache.org/download_jmeter.cgi 2、解压到软件你自己…...

Linux虚拟化————KVM

1、安装kvm虚拟化套件 [rootbogon ~]# yum -y install virt* 2、启动服务 [rootbogon ~]# systemctl start libvirtd [rootbogon ~]# systemctl status libvirtd ● libvirtd.service - Virtualization daemonLoaded: loaded (/usr/lib/systemd/system/libvirtd.service; di…...

【b站李同学的Lee】Part 2 模块化开发 NodeJS+Gulp基础入门+实战

课程地址&#xff1a;【NodeJSGulp基础入门实战】 https://www.bilibili.com/video/BV1aE411n737/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 4 Node.js模块化开发 4.1 JavaScript开发弊端 4.1.1 文件依赖 4.1.2 命名冲突 4.2 生活中的…...

AI大模型日报#0415:贾佳亚团队新作王炸、马斯克首款多模态大模型、ChatGPT to B

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。标题: 融合ChatGPTDALLE3&#xff0c;贾佳亚团队新作开源&#xff1a;识图推理生图一站解决 摘要: 贾佳亚团队推出了多模态模型Mini-Gem…...

基于GRU实现评论文本情感分析

一、问题建模 在线评论的细粒度情感分析对于深刻理解商家和用户、挖掘用户情感等方面有至关重要的价值&#xff0c;并且在互联网行业有极其广泛的应用&#xff0c;主要用于个性化推荐、智能搜索、产品反馈、业务安全等。此博文&#xff0c;共包含6大类20个细粒度要素的情感倾…...

【C 数据结构】线性表

文章目录 【 1. 线性表 】【 2. 顺序存储结构、链式存储结构 】【 3. 前驱、后继 】 【 1. 线性表 】 线性表&#xff0c;全名为线性存储结构&#xff0c;线性表结构存储的数据往往是可以依次排列的&#xff08;不考虑数值大小顺序&#xff09;。 例如&#xff0c;存储类似 {1…...

C++初级----list(STL)

1、 list介绍 1.1、 list介绍 1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 1. list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向 其前一…...

web安全学习笔记(9)

记一下第十三课的内容。 准备工作&#xff1a;在根目录下创建template目录&#xff0c;将login.html放入其中&#xff0c;在该目录下新建一个reg.html。在根目录下创建一个function.php 一、函数声明与传参 PHP中的函数定义和其他语言基本上是相同的。我们编辑function.php …...

【Python-基础】字符串合集

字符串格式化 f # 例如: # f{train_path}/{f}: 将train_path字符串和f字符串结合 # f{root}.csv:将root字符串和.csv字符串结合判断字符串是否以…结尾 root.endswith(".csv") # True未待完续…...

Scala之List

列表 不可变列表(List) 在Scala中&#xff0c;通过List来定义不可变列表&#xff0c;需要注意的是&#xff0c;List本身是一个抽象类&#xff0c;所以并不能直接使用List来构建对象&#xff0c;需要使用它的伴生对象来构建 package com.fesco.listimport scala.::object ListD…...

Springboot+Vue项目-基于Java+MySQL的在线视频教育平台系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…...

Java IO流-字节流

简介 IO流的输入与输出&#xff0c;都在站在内存的角度来看的&#xff0c;因为毕竟是和内促你打交道的嘛&#xff01; 分类 IO流是可以根据方向&#xff0c;或者最小单位进行划分的 上述两两结合一下&#xff0c;就得到四种大的分类 IO流的继承体系 字节输入流InputStream 创建…...

第十五届蓝桥杯复盘python大学A组——试题B 召唤数学精灵

按照正常思路解决&#xff0c;由于累乘消耗大量时间&#xff0c;因此这不是一个明智的解决方案。 这段代码执行速度非常慢的原因在于它试图计算非常大的数的阶乘&#xff08;累乘&#xff09;&#xff0c;并且对于每一个i的值都执行这个计算。阶乘的增长是极其迅速的&#xff…...

网络通信——常见结构及强联网游戏和弱联网游戏区别

声明&#xff1a;本文为个人笔记&#xff0c;用于学习研究使用非商用&#xff0c;内容为个人研究及综合整理所得&#xff0c;若有违规&#xff0c;请联系&#xff0c;违规必改。 网络通信——常见结构及强联网游戏和弱联网游戏区别 文章目录 网络通信——常见结构及强联网游戏和…...

如何安装PyFluent

0.什么是PyFluent? 官方介绍如下&#xff1a; PyFluent 是 PyAnsys 生态系统的一部分&#xff0c; 允许您在所选的 Python 环境中结合使用 Fluent 与其他 PyAnsys 库和外部 Python 库一起使用。 PyFluent 实现了客户端-服务器体系结构。它使用谷歌遥控器 过程调用或 gRPC 接…...

Qt 2 QMapQHashQVector类实例

1. QMap // 1:QMap的使用// 创建一个QMap 实例 key 为 QString value 为 intQMap<QString,int> Grade;// 插入方式有两种插入方式// 1.map[key] valueGrade["语文"] 90;Grade["数学"] 120;// 2.map.insert(key,value);Grade.insert("英语&qu…...

使用Git将文件夹上传到Github以及使用Git LFS上传大文件

使用Git将文件夹上传到Github以及使用Git LFS上传大文件...

1.SCI各模块

1.学会“抄” 写论文&#xff0c;一定要学会“抄”&#xff01;这样才能事半功倍&#xff0c;尤其是对于初次写作的新手&#xff0c;否则写作过程一定会让你痛不欲生&#xff0c;而且写出来的东西就是一坨shi&#xff0c;不仅折磨自己&#xff0c;也折磨导师。 写论文与建大楼…...

记录shell编程中$1,$@等符号的含义

笔者最近老是遇到shell中的$相关的题目&#xff0c;于是打算写篇文章记录一下。考虑到并没有特别多需要解释的内容&#xff0c;所以并不会进行介绍&#xff0c;上图上表上代码&#xff0c;让机器说话&#xff0c;machine always right test.sh #/bin/bash echo $# $# echo …...

单链表的应用

文章目录 目录1. 单链表经典算法OJ题目1.1 [移除链表元素](https://leetcode.cn/problems/remove-linked-list-elements/description/)1.2 [链表的中间节点](https://leetcode.cn/problems/middle-of-the-linked-list/description/)1.3 [反转链表](https://leetcode.cn/problem…...

手机副业赚钱秘籍:让你的手机变成赚钱利器

当今社会&#xff0c;智能手机已然成为我们生活不可或缺的一部分。随着技术的飞速进步&#xff0c;手机不再仅仅是通讯工具&#xff0c;而是化身为生活伴侣与工作助手。在这个信息爆炸的时代&#xff0c;我们时常会被一种焦虑感所困扰&#xff1a;如何能让手机超越消磨时光的定…...

(二十七)Flask之数据库连接池DBUtils库

目录: 每篇前言:DBUtils库模式一(底层使用threading.local实现):模式二:Flask中使用方式一:直接将DBUtils初始化放到settings.py文件中方式二:从utils文件夹中导入脚本使用DBUtils代码demo:每篇前言: 🏆🏆作者介绍:【孤寒者】—CSDN全栈领域优质创作者、HDZ核心…...

FewShotPromptTemplate和SemanticSimilarityExampleSelector的学习

FewShotPromptTemplate 和 SemanticSimilarityExampleSelector 是在少样本学习&#xff08;FewShot Learning&#xff09;场景中常用的两种技术&#xff0c;它们在提高模型泛化能力和减少对大量标注数据的依赖方面扮演着重要角色。 下面我会解释它们之间的关系&#xff1a; F…...

【保姆级】2024年OnlyFans订阅指南

OnlyFans是一个独特的社交媒体平台&#xff0c;它为创作者和粉丝提供了一个互动交流的空间。通过这个平台&#xff0c;创作者可以分享他们的独家内容&#xff0c;而粉丝则可以通过订阅来支持和享受这些内容。如果你对OnlyFans感兴趣&#xff0c;并希望成为其中的一员&#xff0…...

深入理解JVM中的G1垃圾收集器原理、过程和参数配置

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;垃圾收集&#xff08;GC&#xff09;是一个自动管理内存的过程&#xff…...

VUE3 + Elementui-Plus 之 树形组件el-tree 一键展开(收起);一键全选(不全选)

需求&#xff1a; 产品要求权限树形结构添加外部复选框进行全部展开或收起&#xff1b;全选或不全选。 实现步骤&#xff1a; tree组件部分&#xff1a; <div class"role-handle"><div>权限选择(可多选)</div><div><el-checkbox v-mode…...

网站栏目结构包括哪些/凡科建站的优势

Linux操作系统期中考试试卷 (7页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;14.90 积分《Linux操作系统》期中考试班级 学号 姓名一、填空题(每空1分&#xff0c;共20分)1. 某文件的权限为drw-rw-…...

中山精品网站建设方案/2024最火的十大新闻

要点&#xff1a; 案例注意点vuex的引入是在store.index.js中 然后就是对于没有逻辑的方法,就可以直接再组件方法调用commit去直接连接mutations&#xff1a;this.$state.commit(大写方法名,数据) 对那些需要逻辑判断定时器,需要发送ajax请求的都需要在组件方法调用dispatch…...

.net网站开发实训代码/百度产品优化排名软件

最近工作中&#xff0c;要做个客户端提醒的小工具&#xff1b;winform程序自然少不了要读取和应用程序同一个目录的配置文件(不是exe.config文件)&#xff1b; 要读取当前应用程序所在目录我立马想到了System.Environment.CurrentDirectory 来获取当前工作目录。程序运行似乎一…...

做网站建设公司赚钱吗/广东深圳疫情最新消息今天

2019独角兽企业重金招聘Python工程师标准>>> 历经重重考验&#xff0c;系统在生产环境中成功落地之后&#xff0c;可能依然面临系统无法适用大规模应用的挑战&#xff0c;因此我们需要对K8s集群的关键指标进行追踪。Rancher 资深解决方案架构师将在本文中介绍需要追…...

用ps切片做网站/淘宝培训

Ubuntu Linux系统环境变量配置文件&#xff1a; /etc/profile : 在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。 /etc /environment : 在登录时操作系统使用的第二个文件,系统在读取你自己的profile前…...

网站验证码怎么做/品牌推广公司

ODBC是一种连接数据库的开放标准&#xff0c;OLEDB(对象链接和嵌入数据库)位于ODBC层与应用程序之间. 在你的ASP页面里,ADO是位于OLEDB之上的应用程序. 你的ADO调用先被送到OLEDB,然后再交由ODBC处理ODBC是一种连接数据库的开放标准。 ODBC(OpenDataBase Connectivity&#xff…...