C# 基于腾讯云人脸核身和百度云证件识别技术相结合的 API 实现

目录

腾讯云人脸核身技术

Craneoffice.net 采用的识别方式

        1、活体人脸核身(权威库):

        2、活体人脸比对:

        3、照片人脸核身(权威库):

调用成本

百度云身份证识别

调用成本

相关结合点

核心代码

实现调用人脸核身API的示例 

实现调用身份证识别API的示例 

小结


腾讯云人脸核身技术

根据腾讯云的官方介绍,其慧眼人脸核身是一组对用户身份信息真实性进行验证审核的服务套件,提供人脸核身、身份信息核验、银行卡要素核验和运营商类要素核验等各类实名信息认证能力,以解决行业内大量对用户身份信息核实的需求。

Craneoffice.net 采用的识别方式

由于其产品众多,考虑一些综合因素,我们在 Craneoffice.net 架构里主要实现以下三种识别方式:

        1、活体人脸核身(权威库):

         流程为通过录制一段人脸活体静态视频,与大数据权威库身份证信息进行比对,判断是否为 同一人。

        2、活体人脸比对:

         流程为通过上传正确、清晰的身份证正面图片,截取头像图片,再通过录制人脸活体静态视频进行比对,判断是否为同一人。

        3、照片人脸核身(权威库):

         流程为上传正确的身份证正面图片,截取头像图片,传递身份证号与姓名,与大数据权威库身份证信息进行比对,判断是否为同一人。

调用成本

申请开发账号及具体费用情况请访问腾讯云人脸核身产品首页:

https://cloud.tencent.com/act/pro/huiyandiscount

我们的产品调用成本如下表,可参照一下比例,在此仅供参考:

识别方式调用成功的成本
活体人脸核身(权威库)1元 / 每次
活体人脸比对0.15元 / 每次
照片人脸核身(权威库)1元 / 每次

总之,在腾讯云商城购买越大的产品包调用成本越低,如果有优惠活动则更为合适。

百度云身份证识别

其官方宣传可以结构化识别二代居民身份证正反面所有8个字段,识别准确率超过99%;支持识别混贴身份证,适用于同一张图上有多张身份证正反面的场景;支持检测身份证正面头像,并返回头像切片的base64编码及位置信息,其具体详细产品介绍请访问如下地址:

https://ai.baidu.com/tech/ocr_cards/idcard

调用成本

我们使用的是企业申请,一个月应该可以享受2000次免费调用,后期调用应该是0.02元左右每次,具体可参照:

https://ai.baidu.com/ai-doc/OCR/fk3h7xune#%E8%BA%AB%E4%BB%BD%E8%AF%81%E8%AF%86%E5%88%AB

相关结合点

在人脸核身方面,虽然我们可以直接提供身份证号、姓名、自拍抠图的头像BASE64编码等参数传递给腾讯云识别接口,但考虑到实际应用场景中,更加规范、有效的验证有助于提升应用程序数据的质量和精准性,也更加保障了识别结果的准确性。

因此身份证的识别功能和人脸核身功能即可以单独独立运行,又可以利用产品特性相结合,实现数据采集、校验的双保险。

具体流程如下图:

核心代码

实现调用人脸核身API的示例 

该示例代码以上小节的介绍的三种识别方式实现,仅供参考:

//定义人脸识别类public class FaceR{public string ResultJson = "";   //记录返回 json 结果public string apiurl = "faceid.tencentcloudapi.com"; //腾讯人脸识别API地址public string debuginfo = "";  //调试信息public string ErrorMessage = "";  //错误信息string[] signHeaders = null;      //头部签名数组public FaceR(){}//活体人脸核身方法,参数为身份证号;检验类型,这里传固定值 SILENT;姓名;活体的静态视频编码;方法返回相似度值等信息public string LivenessRecognition(string IdCard,string LivenessType,string Name,string VideoBase64){string content = "{  \"IdCard\":\"" + IdCard + "\",\"LivenessType\":\"" + LivenessType + "\", \"Name\":\"" + Name + "\" ,\"VideoBase64\":\"" + VideoBase64 + "\"}";// 密钥参数string SECRET_ID = 你申请的IDstring SECRET_KEY = 你申请的KEYstring service = "faceid";string endpoint = "faceid.tencentcloudapi.com";string region = "ap-guangzhou";string action = "LivenessRecognition";string version = "2018-03-01";// 注意时区,建议此时间统一采用UTC时间戳,否则容易出错DateTime date = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(1551113065);date = DateTime.UtcNow;string requestPayload = content;Dictionary<string, string> headers = BuildHeaders(SECRET_ID, SECRET_KEY, service, endpoint, region, action, version, date, requestPayload);string rv = "POST https://faceid.tencentcloudapi.com\n";ArrayList hs = new ArrayList();foreach (KeyValuePair<string, string> kv in headers){rv += (kv.Key + ": " + kv.Value) + "\n";hs.Add(kv.Key + ": " + kv.Value);}rv += "\n";hs.Add("");rv += requestPayload + "\n";string[] hss = new string[hs.Count];debuginfo = "";for (int i = 0; i < hs.Count; i++){hss[i] = hs[i].ToString();debuginfo += hss[i] + "\r\n";}signHeaders = hss;string rvs = "";rvs=GetResponseResult("https://faceid.tencentcloudapi.com", Encoding.UTF8, "POST",content, signHeaders);return rvs;}//活体人脸比对方法,参数为传递检验类型,这里传固定值 SILEN;身份证头像图片编码;活体的静态视频编码,方法返回相似度值等信息public string LivenessCompare(string LivenessType, string ImageBase64, string VideoBase64){string content = "{ \"LivenessType\":\"" + LivenessType + "\", \"ImageBase64\":\"" + ImageBase64 + "\" ,\"VideoBase64\":\"" + VideoBase64 + "\"}";// 密钥参数string SECRET_ID = 你申请的IDstring SECRET_KEY = 你申请的KEYstring service = "faceid";string endpoint = "faceid.tencentcloudapi.com";string region = "ap-guangzhou";string action = "LivenessCompare";string version = "2018-03-01";// 注意时区,建议此时间统一采用UTC时间戳,否则容易出错DateTime date = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(1551113065);date = DateTime.UtcNow;string requestPayload = content;Dictionary<string, string> headers = BuildHeaders(SECRET_ID, SECRET_KEY, service, endpoint, region, action, version, date, requestPayload);string rv = "POST https://faceid.tencentcloudapi.com\n";ArrayList hs = new ArrayList();foreach (KeyValuePair<string, string> kv in headers){rv += (kv.Key + ": " + kv.Value) + "\n";hs.Add(kv.Key + ": " + kv.Value);}rv += "\n";hs.Add("");rv += requestPayload + "\n";string[] hss = new string[hs.Count];debuginfo = "";for (int i = 0; i < hs.Count; i++){hss[i] = hs[i].ToString();debuginfo += hss[i] + "\r\n";}signHeaders = hss;string rvs = "";rvs = GetResponseResult("https://faceid.tencentcloudapi.com", Encoding.UTF8, "POST", content, signHeaders);return rvs;}//照片人脸核身方法,参数传递身份证号;姓名;截取的身份证头像图片编码;方法返回相似度值等信息public string ImageRecognition(string IdCard,string Name, string ImageBase64){string content = "{ \"IdCard\":\"" + IdCard + "\", \"Name\":\"" + HttpUtility.UrlDecode(Name, Encoding.UTF8) + "\" ,\"ImageBase64\":\"" + ImageBase64 + "\"}";// 密钥参数string SECRET_ID = 你申请的IDstring SECRET_KEY = 你申请的KEYstring service = "faceid";string endpoint = "faceid.tencentcloudapi.com";string region = "ap-guangzhou";string action = "ImageRecognition";string version = "2018-03-01";// 注意时区,建议此时间统一采用UTC时间戳,否则容易出错DateTime date = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(1551113065);date = DateTime.UtcNow;string requestPayload = content;Dictionary<string, string> headers = BuildHeaders(SECRET_ID, SECRET_KEY, service, endpoint, region, action, version, date, requestPayload);string rv = "POST https://faceid.tencentcloudapi.com\n";ArrayList hs = new ArrayList();foreach (KeyValuePair<string, string> kv in headers){rv += (kv.Key + ": " + kv.Value) + "\n";hs.Add(kv.Key + ": " + kv.Value);}rv += "\n";hs.Add("");rv += requestPayload + "\n";string[] hss = new string[hs.Count];debuginfo = "";for (int i = 0; i < hs.Count; i++){hss[i] = hs[i].ToString();debuginfo += hss[i] + "\r\n";}signHeaders = hss;string rvs = "";rvs = GetResponseResult("https://faceid.tencentcloudapi.com", Encoding.UTF8, "POST", content, signHeaders);return rvs;}//SHA256Hex算法public static string SHA256Hex(string s){using (SHA256 algo = SHA256.Create()){byte[] hashbytes = algo.ComputeHash(Encoding.UTF8.GetBytes(s));StringBuilder builder = new StringBuilder();for (int i = 0; i < hashbytes.Length; ++i){builder.Append(hashbytes[i].ToString("x2"));}return builder.ToString();}}//HMAC-SHA256算法public static byte[] HmacSHA256(byte[] key, byte[] msg){using (HMACSHA256 mac = new HMACSHA256(key)){return mac.ComputeHash(msg);}}//构造头部签名public static Dictionary<String, String> BuildHeaders(string secretid,string secretkey, string service, string endpoint, string region,string action, string version, DateTime date, string requestPayload){string datestr = date.ToString("yyyy-MM-dd");DateTime startTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);long requestTimestamp = (long)Math.Round((date - startTime).TotalMilliseconds, MidpointRounding.AwayFromZero) / 1000;// ************* 步骤 1:拼接规范请求串 *************string algorithm = "TC3-HMAC-SHA256";string httpRequestMethod = "POST";string canonicalUri = "/";string canonicalQueryString = "";string contentType = "application/json";string canonicalHeaders = "content-type:" + contentType + "; charset=utf-8\n"+ "host:" + endpoint + "\n"+ "x-tc-action:" + action.ToLower() + "\n";string signedHeaders = "content-type;host;x-tc-action";string hashedRequestPayload = SHA256Hex(requestPayload);string canonicalRequest = httpRequestMethod + "\n"+ canonicalUri + "\n"+ canonicalQueryString + "\n"+ canonicalHeaders + "\n"+ signedHeaders + "\n"+ hashedRequestPayload;Console.WriteLine(canonicalRequest);// ************* 步骤 2:拼接待签名字符串 *************string credentialScope = datestr + "/" + service + "/" + "tc3_request";string hashedCanonicalRequest = SHA256Hex(canonicalRequest);string stringToSign = algorithm + "\n"+ requestTimestamp.ToString() + "\n"+ credentialScope + "\n"+ hashedCanonicalRequest;Console.WriteLine(stringToSign);// ************* 步骤 3:计算签名 *************byte[] tc3SecretKey = Encoding.UTF8.GetBytes("TC3" + secretkey);byte[] secretDate = HmacSHA256(tc3SecretKey, Encoding.UTF8.GetBytes(datestr));byte[] secretService = HmacSHA256(secretDate, Encoding.UTF8.GetBytes(service));byte[] secretSigning = HmacSHA256(secretService, Encoding.UTF8.GetBytes("tc3_request"));byte[] signatureBytes = HmacSHA256(secretSigning, Encoding.UTF8.GetBytes(stringToSign));string signature = BitConverter.ToString(signatureBytes).Replace("-", "").ToLower();Console.WriteLine(signature);// ************* 步骤 4:拼接 Authorization *************string authorization = algorithm + " "+ "Credential=" + secretid + "/" + credentialScope + ", "+ "SignedHeaders=" + signedHeaders + ", "+ "Signature=" + signature;Console.WriteLine(authorization);Dictionary<string, string> headers = new Dictionary<string, string>();headers.Add("Authorization", authorization);headers.Add("Host", endpoint);headers.Add("Content-Type", contentType + "; charset=utf-8");headers.Add("X-TC-Timestamp", requestTimestamp.ToString());headers.Add("X-TC-Version", version);headers.Add("X-TC-Action", action);headers.Add("X-TC-Region", region);return headers;}//调用API地址,传递参数并获取返回值的通用方法public string GetResponseResult(string url, System.Text.Encoding encoding, string method, string postData, string[] headers, string ContentType = "application/x-www-form-urlencoded"){method = method.ToUpper();System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;if (method == "GET"){try{WebRequest request2 = WebRequest.Create(@url);request2.Method = method;WebResponse response2 = request2.GetResponse();Stream stream = response2.GetResponseStream();StreamReader reader = new StreamReader(stream, encoding);string content = reader.ReadToEnd();return content;}catch (Exception ex){ErrorMessage = ex.Message;return "";}}Stream outstream = null;Stream instream = null;StreamReader sr = null;HttpWebResponse response = null;HttpWebRequest request = null;byte[] data = encoding.GetBytes(postData);// 准备请求...try{// 设置参数request = WebRequest.Create(url) as HttpWebRequest;CookieContainer cookieContainer = new CookieContainer();request.CookieContainer = cookieContainer;request.AllowAutoRedirect = true;request.Method = method;debuginfo = headers.GetLength(0).ToString()+"\r\n";if (headers != null){for (int i = 0; i < headers.GetLength(0); i++){if (headers[i].Split(':').Length < 2){continue;}debuginfo += i.ToString()+headers[i]+"\r\n";if (headers[i].Split(':').Length > 1){if (headers[i].Split(':')[0] == "Host"){request.Host = headers[i].Split(':')[1].Trim();continue;}else if (headers[i].Split(':')[0] == "Content-Type"){request.ContentType = headers[i].Split(':')[1].Trim();ContentType = headers[i].Split(':')[1].Trim();continue;}}request.Headers.Add(headers[i].Trim());}debuginfo += "sd2" + "\r\n";}request.ContentType = ContentType;request.ContentLength = data.Length;outstream = request.GetRequestStream();outstream.Write(data, 0, data.Length);outstream.Close();//发送请求并获取相应回应数据response = request.GetResponse() as HttpWebResponse;//直到request.GetResponse()程序才开始向目标网页发送Post请求instream = response.GetResponseStream();sr = new StreamReader(instream, encoding);//返回结果网页(html)代码string content = sr.ReadToEnd();return content;}catch (Exception ex){ErrorMessage = ex.Message;return "";}}//get response result}

实现调用身份证识别API的示例 

                public class IdCard{public string name = "";        //姓名public string sex = "";         //性别public string photo_base64 = "";    //截取的身份证头像图像的编码值 public string nation = "";       //民族public string address = "";      //住址public string IDNumber = "";      //身份证号public string birthday = "";      //生日public string org = "";           //发证机关public string startDate = "";      //有效期起public string endDate = "";        //有效期止public string ResultJson = "";     //记录返回的JSON值public string ErrorMessage = "";   //记录错误信息public string direction = "";        //上传时图片的方向public string image_status = "";     //上传图片的识别状态public string risk_type = "";        //上传图片的识别类型public string edit_tool = "";        //上传图片是否P图public string idcard_number_type = "";   //上传图片的识别错误信息public IdCard(){}//得到指定文件的 byte[],参数为文件绝对路径值private  byte[] getImageByte(string imagePath){FileStream files = new FileStream(imagePath, FileMode.Open);byte[] imgByte = new byte[files.Length];files.Read(imgByte, 0, imgByte.Length);files.Close();return imgByte;}//识别身份证信息方法,参数为文件绝对路径值;正反面值:正面传 front,反面传 backpublic void valid(string imagePath, string id_card_side){name = "";sex = "";photo_base64 = "";nation = "";address = "";IDNumber = "";birthday = "";org = "";startDate = "";endDate = "";direction="";image_status = "";risk_type = "";edit_tool = "";idcard_number_type = "";byte[] image = getImageByte(imagePath);var APP_ID = 申请的开发ID;var API_KEY = 申请的开发KEY;var SECRET_KEY = 开发密钥;var client = new Baidu.Aip.Ocr.Ocr(API_KEY, SECRET_KEY);client.Timeout = 60000;  // 修改超时时间Newtonsoft.Json.Linq.JObject result = new JObject();var options = new Dictionary<string, object>{{"detect_risk", "true"},{"detect_direction", "true"},{"detect_photo", "true"}};try{result = client.Idcard(image, id_card_side, options);ResultJson = result.ToString();if (id_card_side == "front"){name = result["words_result"]["姓名"]["words"].ToString();sex = result["words_result"]["性别"]["words"].ToString();nation = result["words_result"]["民族"]["words"].ToString();address = result["words_result"]["住址"]["words"].ToString();IDNumber = result["words_result"]["公民身份号码"]["words"].ToString();photo_base64 = result["photo"].ToString();birthday = result["words_result"]["出生"]["words"].ToString();birthday = birthday.Substring(0, 4) + "-" + birthday.Substring(4, 2) + "-" + birthday.Substring(6, 2);}if (id_card_side == "back"){org = result["words_result"]["签发机关"]["words"].ToString();startDate = result["words_result"]["签发日期"]["words"].ToString();startDate = startDate.Substring(0, 4) + "-" + startDate.Substring(4, 2) + "-" + startDate.Substring(6, 2);endDate = result["words_result"]["失效日期"]["words"].ToString();endDate = endDate.Substring(0, 4) + "-" + endDate.Substring(4, 2) + "-" + endDate.Substring(6, 2);}direction = result["direction"].ToString();switch (direction){case "-1":direction = "未定义";break;case "0":direction = "正向";break;case "1":direction = "逆时针90度";break;case "2":direction = "逆时针180度";break;case "3":direction = "逆时针270度";break;}image_status = result["image_status"].ToString();switch (image_status){case "normal":image_status = "识别正常";break;case "reversed_side":image_status = "身份证正反面颠倒";break;case "non_idcard":image_status = "上传的图片中不包含身份证";break;case "blurred":image_status = "身份证模糊";break;case "other_type_card":image_status = "其他类型证照";break;case "over_exposure":image_status = "身份证关键字段反光或过曝";break;case "over_dark":image_status = "身份证欠曝(亮度过低)";break;case "unknown":image_status = "未知状态";break;}risk_type = result["risk_type"].ToString();switch (risk_type){case "normal":risk_type = "正常身份证";break;case "copy":risk_type = "复印件";break;case "temporary":risk_type = "临时身份证";break;case "screen":risk_type = "翻拍";break;case "unknown":risk_type = "其他未知情况";break;}if (ResultJson.IndexOf("edit_tool") != -1){edit_tool = result["edit_tool"].ToString();}else{edit_tool = "未P图";}if (ResultJson.IndexOf("idcard_number_type") != -1){idcard_number_type = result["idcard_number_type"].ToString();switch (idcard_number_type){case "-1":idcard_number_type = "身份证正面所有字段全为空";break;case "0":idcard_number_type = "身份证证号识别错误";break;case "1":idcard_number_type = "身份证证号和性别、出生信息一致";break;case "2":idcard_number_type = "身份证证号和性别、出生信息都不一致";break;case "3":idcard_number_type = "身份证证号和出生信息不一致";break;case "4":idcard_number_type = "身份证证号和性别信息不一致";break;}}}catch (Exception e){ErrorMessage = e.Message;}}}// idcard

小结

采用哪种识别方式,要根据我们在实际的应用场景中进行选择,而且也需要考虑调用的成本(本文涉及的调用成本仅供参考)。这里讲述的几种方案是我们自研产品中所采用的方式,腾讯云的人脸核身产品分支很多,大家可以根据具体需求进行选择、扩充自己的产品功能。

再次感谢您的阅读,欢迎大家讨论指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/172080.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统架构设计师之使用McCabe方法可以计算程序流程图的环形复杂度

系统架构设计师之使用McCabe方法可以计算程序流程图的环形复杂度

【C++】多态 ③ ( “ 多态 “ 实现需要满足的三个条件 | “ 多态 “ 的应用场景 | “ 多态 “ 的思想 | “ 多态 “ 代码示例 )

文章目录 一、" 多态 " 实现条件1、" 多态 " 实现需要满足的三个条件2、" 多态 " 的应用场景3、" 多态 " 的思想 二、" 多态 " 代码示例 一、" 多态 " 实现条件 1、" 多态 " 实现需要满足的三个条件 &q…

【深蓝学院】手写VIO第8章--相机与IMU时间戳同步--笔记

0. 内容 1. 时间戳同步问题及意义 时间戳同步的原因&#xff1a;如果不同步&#xff0c;由于IMU频率高&#xff0c;可能由于时间戳不同步而导致在两帧camera之间的时间内用多了或者用少了IMU的数据&#xff0c;且时间不同步会导致我们首尾camera和IMU数据时间不同&#xff0c;…

java基础 特殊文件

1.Properties属性文件&#xff1a; 1.1使用Properties读取属性文件里的键值对数据&#xff1a; package specialFile;import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.Enumeration; import java.util.Propert…

读高性能MySQL(第4版)笔记21_读后总结与感想兼导读

1. 基本信息 高性能MySQL&#xff1a;经过大规模运维验证的策略&#xff08;第4版&#xff09; High Performance MySQL, Fourth Edition [美] Silvia Botros(西尔维亚博特罗斯)&#xff1b;Jeremy Tinley(杰里米廷利) 电子工业出版社,2022年10月出版 1.1. 读薄率 书籍总字…

【机器学习合集】优化目标与评估指标合集 ->(个人学习记录笔记)

文章目录 优化目标与评估指标1. 优化目标1.1 两类基础任务与常见优化目标1.2 分类任务损失0-1损失交叉熵损失与KL散度softmax损失的理解与改进Hinge损失 1.3 回归任务损失L1/L2距离L1/L2距离的改进 Huber loss 2. 评测指标2.1 分类任务中评测指标准确率(查准率)/召回率(查全率)…

修改svc的LoadBalancer的IP引发的惨案

文章目录 背景修改externalIPs的操作api-server报错日志挽救教训 背景 k8s集群没有接外部负载均衡&#xff0c;部署istio的时候ingressgateway一直pending。 于是手动修改了这个lb svc的externalIP&#xff0c;于是k8s就崩了&#xff0c;如何崩的&#xff0c;且听我还道来。 …

CRM客户管理系统源码 带移动端APP+H5+小程序

CRM客户管理系统源码 带移动端APPH5小程序 开发环境: thinkphp mysql 功能介绍&#xff1a; 1、 办公管理&#xff1a;审批管理、工作报告、日程管理、办公审批、公告管理 2、 客户管理&#xff1a;我的客户、客户列表、成交客户、行业类别、预查、地区列表、客户状态、客…

【Unity数据交互】JSON开山篇

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

Rabbitmq----分布式场景下的应用

服务异步通信-分布式场景下的应用 如果单机模式忘记也可以看看这个快速回顾rabbitmq,在做学习 消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 1.消息可靠性 消息从发送&#xff0c;到消费者接收&#xff0c;会经理多个过程&#xff1a; 其中的每一…

嵌入式软件找实习需要掌握哪些知识?

嵌入式软件找实习需要掌握哪些知识&#xff1f; 嵌入式软件实习暂时不用刷力扣。具体需要掌握哪些知识每个公司的要求都不太一样&#xff0c;因为嵌入式也有很多细分领域&#xff0c;单片机、C语言是需要熟悉的&#xff0c;最近很多小伙伴找我&#xff0c;说想要一些嵌入式资料…

如何在VScode中让printf输出中文

如何在VScode中让printf输出中文&#xff1f; 1、在“Visual Studio Code”图标上右击&#xff0c;弹出对话框。见下图&#xff1a; 2、点击“以管理员身份运行”&#xff0c;得到下图&#xff1a; 3、点击“UTF-8”按钮&#xff0c;得到下图&#xff1a; 4、点击“通过编码重…

什么是时序图,看了你就明白

目录 前言: 什么是时序图: 时序图的组成元素&#xff1a; 1. 角色(Actor) 2. 对象(Object) 3. 生命线(LifeLine) 4. 激活期(Activation) 5. 消息类型(Message) 6.组合片段(Combined fragment) 时序图的绘制规则:​ 绘制时序图的3步&#xff1a; 1.划清边界&#xf…

Vue $nextTick

我们用一个例子来说明$nextTick的作用&#xff1a; 我们用一个变量showIpt来控制input框的显示和隐藏&#xff0c;默认是隐藏。 我们点击一个按钮后显示这个输入框的同时&#xff0c;input还要自动获取焦点。 但是我们点击按钮过后并没有生效。 为什么&#xff1f;this.show…

Linux云服务器限制ip进行ssh远程连接

对Linux云服务器限制IP进行SSH远程连接的原因主要有以下几点&#xff1a; 增加安全性&#xff1a;SSH是一种加密的网络传输协议&#xff0c;可以保护数据的机密性和完整性。通过限制SSH连接的IP地址&#xff0c;可以防止未经授权的访问和数据泄露。只有拥有访问权限的IP地址才…

关于亚马逊 CodeWhisperer 的使用体验

Amazon CodeWhisperer 是亚⻢逊出品的一款基于机器学习的 AI 编程助手&#xff0c;可实时提供代码建议。现在已正式可用&#xff0c;面向个人提供免费服务&#xff0c;通过在各种流行的IDE里集成 CodeWhisperer&#xff08;包括我们常用的 JetBrains 产品包及 Vscode 工具集&am…

什么是蓝桥杯?什么是蓝桥STEMA考试?

第十五届蓝桥大赛赛事安排? STEMA考试11月(考试时间11月26日) STEMA考试1月(2024年1月) STEMA考试3月(2024年3月) 第十五届蓝桥杯省赛(2024年4月待定) 第十五届蓝桥杯国赛(2024年5月待定) 注:以上时间具体以组委会官方发布为准。 01.蓝桥杯 蓝桥杯全国软件和…

【C++】C++入门(中)--引用

目录 一 引用概念 二 引用特性 三 常引用 四 引用使用场景 1 做参数 2. 做返回值 1 例一 2 例二 3 例三 4 例四 五 传值, 传引用效率比较 六 值和引用的作为返回值类型的性能比较 七 引用和指针的区别 一 引用概念 引用不是新定义一个变量&#xff0c;而是给已存…

2015年亚太杯APMCM数学建模大赛B题城市公共交通服务水平动态评价模型求解全过程文档及程序

2015年亚太杯APMCM数学建模大赛 B题 城市公共交通服务水平动态评价模型 原题再现 城市公共交通服务评价是城市公共交通系统建设和提高公共交通运营效率的重要组成部分。对于公交企业&#xff0c;管理和规划部门&#xff0c;传统公交车站、线路和换乘枢纽的规划数据只是基于主…

深入探究ASEMI肖特基二极管MBR60100PT的材质

编辑-Z 在电子零件领域中&#xff0c;肖特基二极管MBR60100PT因其出色的性能和广泛的应用而显得尤为关键。理解其材质不仅有助于我们深入理解其运作原理&#xff0c;也有助于我们做出更合适的电子设计。那么&#xff0c;肖特基二极管MBR60100PT是什么材质呢? 首先&#xff0c…