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

新中新身份证阅读器驱动下载sdk DKQ-A16D

读取操作

int nRet;string sMsg = "";IDCardData idcardData = new IDCardData();byte[] ctmp = new byte[255];ReadCardAPI.Syn_SetPhotoPath(1, ref ctmp);setupDataFormate(1);nRet = ReadCardAPI.Syn_OpenPort(Main_Form.m_iPort);if (nRet == 0){DateTime startTime = DateTime.Now;nRet = ReadCardAPI.Syn_ReadMsg(Main_Form.m_iPort, 0, ref idcardData);int dTime = (int)(DateTime.Now - startTime).TotalMilliseconds;if (Main_Form.m_iReadStart == 1){Main_Form.m_iReadSum++;}if (nRet == 0 || nRet == 1)     //0读取身份证信息成功,1读取身份证信息成功,解码照片不成功,其他.读取身份证信息失败{if (Main_Form.m_iReadStart == 1){Main_Form.m_iReadOKSum++;}ShowIDcardInfo(idcardData);sMsg = "读取身份证信息成功," + dTime + "ms";mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + sMsg);}else{sMsg = "读取身份证信息错误," + dTime + "ms";mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + sMsg);}if (Main_Form.m_iReadStart == 1){sMsg = "第" + Main_Form.m_iReadSum + "次读二代证";mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + sMsg);}}else{sMsg = "打开端口错误";mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + sMsg);}if (Main_Form.m_iPort > 0){ReadCardAPI.Syn_ClosePort(Main_Form.m_iPort);}

解析二代证

/// <summary>/// 显示读取到的身份证的信息/// </summary>/// <param name="idcardData"></param>private void ShowIDcardInfo(IDCardData idcardData){string sMsg = "";sMsg = "照片路径:" + idcardData.PhotoFileName;mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + sMsg);if (idcardData.CardType[0] == 'J')//港澳台通行证{sMsg=("签发次数:"+ idcardData.IssuesTimes);mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + (sMsg));sMsg="通行证号码:"+ idcardData.PassID;mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + (sMsg));}sMsg = "有效期结束:" + idcardData.UserLifeEnd;mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + sMsg);sMsg = "有效期开始:" + idcardData.UserLifeBegin;mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + sMsg);sMsg = "发证机关:" + idcardData.GrantDept;mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + sMsg);sMsg = "身份证号:" + idcardData.IDCardNo;mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + sMsg);sMsg = "住址:" + idcardData.Address;mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + sMsg);sMsg = "出生:" + idcardData.Born;mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + sMsg);sMsg = "民族:" + idcardData.Nation;mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + sMsg);sMsg = "性别:" + idcardData.Sex;mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + sMsg);if (idcardData.CardType == "I"){//外国人居住证sMsg = "证件版本:" + idcardData.CertVol;mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + sMsg);sMsg = "英文姓名:" + idcardData.EngName;mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + sMsg);}sMsg = "姓名:" + idcardData.Name;mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + sMsg);if (idcardData.CardType[0] == 'I'){sMsg="证件类型:外国人永久居住证";mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + sMsg);}else if (idcardData.CardType[0] == 'J'){sMsg="证件类型:港澳台居民居住证";mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + (sMsg));}else{sMsg="证件类型:居民身份证";mainForm.listBox_log.Items.Insert(0, DateTime.Now.ToString() + "\t" + (sMsg));}//这样做可以及时释放文件占用,否则第二次刷卡会报错Image tmp = Image.FromFile(idcardData.PhotoFileName);Bitmap img = new Bitmap(tmp);tmp.Dispose();mainForm.pictureBox_img.Image = img;}

封装读卡类

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;namespace SynjonesReader
{public static class ReadCardAPI{////				SAM端口函数/////// <summary>/// 查看串口当前波特率(该函数只用于SAM采用RS232串口的情形,如果采用USB接口则不支持该API)/// </summary>/// <param name="iPort">[in] 整数,表示端口号。此处端口号必须为1-16,表示串口</param>/// <param name="puiBaudRate">[out] 无符号整数指针,指向普通串口当前波特率, 默认情况下为115200</param>/// <returns>0成功,1失败/不合法,5无法获得该SAM的波特率,该SAM串口不可用</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_GetCOMBaud")]public static extern int Syn_GetCOMBaud(int iPort, ref int puiBaudRate);/// <summary>/// 设置SAM的串口的波特率(该函数只用于SAM采用RS232串口的情形,如果采用USB接口则不支持该API),/// 设置成功后,在该SAM和主机注册表中都记录设置后的波特率,保证在SAM重新启动和该套API被重新调用时采用设置后的波特率。/// 该函数调用成功后,需要延时5毫秒,然后才能继续与SAM通信/// </summary>/// <param name="iPort">[in] 整数,表示端口号。此处端口号必须为1-16,表示串口。</param>/// <param name="uiCurrBaud">/// [in] 无符号整数,调用该API前已设置的业务终端与SAM通信的波特率(SAM出厂时默认,业务终端与SAM通信的波特率为115200)./// 业务终端以该波特率与SAM通信,发出设置SAM新波特率的命令.。/// uiCurrBaud只能为下列数值之一:115200,57600,38400,19200,9600.如果uiCurrBaud数值不是这些值之一,函数返回0X21;/// 如果已设置的波特率与uiCurrBaud不一致, 则函数返回0X02,表示不能设置,调用API不成功。/// </param>/// <param name="uiSetBaud">/// [in] 无符号整数,将要设置的SAM与业务终端通信波特率。/// uiSetBaud只能取下列值之一::115200,57600,38400,19200,9600,/// 如果输入uiSetBaud参数不是这些数值之一,,函数返回0X21,设置不成功,保持原来的波特率不变。/// </param>/// <returns>/// 0成功,1端口打开失败/端口号不合法,2超时,设置不成功,33 uiCurrBaud 、uiSetBaud输入参数数值错误/// </returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SetCOMBaud")]public static extern int Syn_SetCOMBaud(int iPort, int uiCurrBaud, int uiSetBaud);/// <summary>/// 打开端口/// </summary>/// <param name="iPort">端口号。1-16(十进制)为串口,1001-1016(十进制)为USB口,9999为USBHID</param>/// <returns>0成功,1打开端口失败/端口号不合法</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_OpenPort")]public static extern int Syn_OpenPort(int iPort);/// <summary>/// 关闭端口/// </summary>/// <param name="iPort">[in]整数,表示端口号</param>/// <returns>0成功,1端口不合法</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_ClosePort")]public static extern int Syn_ClosePort(int iPort);////				SAM类函数////[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SetMaxRFByte")]public static extern int Syn_SetMaxRFByte(int iPort,byte ucByte, int bIfOpen);/// <summary>/// 对SAM复位/// </summary>/// <param name="iPort">/// [in] 整数,表示端口号。/// 根据SAM使用的接口不同(分为普通串口SAM和USB口SAM),/// 分别使用不同的端口号(目前串口和USB都只支持16个,即串口0001-0016和USB1001-1016)/// </param>/// <param name="iIfOpen">/// [in] 整数,0表示不在该函数内部打开和关闭串口,/// 此时确保之前调用了Syn_OpenPort来打开端口,并且在不需要与端口通信时,调用Syn_ClosePort关闭端口;/// 非0表示在API函数内部包含了打开端口和关闭端口函数,之前不需要调用Syn_OpenPort,也不用再调用Syn_ClosePort/// </param>/// <returns>0成功,其他失败(具体参见返回码表)</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_ResetSAM")]public static extern int Syn_ResetSAM(int iPort, int iIfOpen);/// <summary>/// 对SAM进行状态检测/// </summary>/// <param name="iPort">[in] 整数,表示端口号。参见Syn_ResetSAM</param>/// <param name="iIfOpen">[in] 整数,参见Syn_ResetSAM</param>/// <returns>0SAM正常,96自检失败,不能接收命令,其他,命令失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_GetSAMStatus")]public static extern int Syn_GetSAMStatus(int iPort, int iIfOpen);/// <summary>/// 读取SAM的编号/// </summary>/// <param name="iPort">[in] 整数,表示端口号。参见Syn_ResetSAM</param>/// <param name="pucSAMID">[out] 无符号字符串指针,指向读到的SAM编号, 16字节</param>/// <param name="iIfOpen"></param>/// <returns>0成功,其他,失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_GetSAMID")]public static extern int Syn_GetSAMID(int iPort, byte[] pucSAMID, int iIfOpen);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_GetSAMIDToStr")]public static extern int Syn_GetSAMIDToStr(int iPort, ref char[] pucSAMID, int iIfOpen);////				身份证卡类函数/////// <summary>/// 开始寻卡/// </summary>/// <param name="iPort">[in] 整数,表示端口号。参见Syn_ResetSAM</param>/// <param name="pucIIN">[out] 无符号字符指针,指向读到的IIN</param>/// <param name="iIfOpen">[in] 整数,参见Syn_ResetSAM</param>/// <returns>0成功,128失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_StartFindIDCard")]public static extern int Syn_StartFindIDCard(int iPort, ref byte[] pucIIN, int iIfOpen);/// <summary>/// 选卡/// </summary>/// <param name="iPort">[in] 整数,表示端口号。参见Syn_ResetSAM</param>/// <param name="pucIIN">[out] 无符号字符指针,指向读到的SN</param>/// <param name="iIfOpen">[in] 整数,参见Syn_ResetSAM</param>/// <returns>0选卡成功,129选卡失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SelectIDCard")]public static extern int Syn_SelectIDCard(int iPort, ref byte[] pucIIN, int iIfOpen);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_ReadBaseMsg")]public static extern int Syn_ReadBaseMsg(int iPort, ref byte pucCHMsg, ref int puiCHMsgLen,ref byte pucPHMsg,ref int puiPHMsgLen, int iIfOpen);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_ReadBaseMsgToFile")]public static extern int Syn_ReadBaseMsgToFile(int iPort, ref char[] pcCHMsgFileName, ref int puiCHMsgLen, ref char[] pcPHMsgFileName, ref int puiPHMsgLen, int iIfOpen);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_ReadBaseFPMsg")]public static extern int Syn_ReadBaseFPMsg(int iPort, ref byte pucCHMsg, ref int puiCHMsgLen, ref byte pucPHMsg, ref int puiPHMsgLen, ref byte pucFPMsg, ref int puiFPMsgLen, int iIfOpen);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_ReadBaseFPMsgToFile")]public static extern int Syn_ReadBaseFPMsgToFile(int iPort, ref char[] pcCHMsgFileName, ref int puiCHMsgFileLen, ref char[] pcPHMsgFileName, ref int puiPHMsgFileLen, ref char[] pcFPMsgFileName, ref int puiFPMsgFileLen, int iIfOpen);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_ReadNewAppMsg")]public static extern int Syn_ReadNewAppMsg(int iPort, ref byte pucAppMsg, ref int puiAppMsgLen, int iIfOpen);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_GetBmp")]public static extern int Syn_GetBmp(int iPort, ref char[] Wlt_File);/// <summary>/// 读取身份证中的基本信息和照片信息,并按设置转化信息和照片/// </summary>/// <param name="iPort">[in] 整数,表示端口号。参见Syn_ResetSAM</param>/// <param name="iIfOpen">[in] 整数,参见Syn_ResetSAM</param>/// <param name="pIDCardData">[out] IDCardData信息</param>/// <returns>0读取身份证信息成功,1读取身份证信息成功,解码照片不成功,其他.读取身份证信息失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_ReadMsg")]public static extern int Syn_ReadMsg(int iPort, int iIfOpen, ref IDCardData pIDCardData);/// <summary>/// 读取身份证中的基本信息和照片信息,并按设置转化信息和照片/// </summary>/// <param name="iPort">[in] 整数,表示端口号。参见Syn_ResetSAM</param>/// <param name="iIfOpen">[in] 整数,参见Syn_ResetSAM</param>/// <param name="pIDCardData">[out] IDCardData信息</param>/// <param name="cFPhotoname">cFPhotoName返回指纹信息文件名</param>/// <returns>0读取身份证信息成功,无指纹信息,1读取身份证信息成功,指纹读取成功,其他.读取身份证信息失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_ReadFPMsg")]public static extern int Syn_ReadFPMsg(int iPort, int iIfOpen, ref IDCardData pIDCardData, byte[] cFPhotoname);/// <summary>/// 自动寻找读卡器/// </summary>/// <returns>0失败,大于0为串口号或者端口号</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_FindReader")]public static extern int Syn_FindReader();[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_FindUSBReader")]public static extern int Syn_FindUSBReader();[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_BmpToJpeg")]public static extern int Syn_BmpToJpeg(ref char[] cBmpName, ref char[] cJpegName);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_PhotoToStrBase64")]public static extern int Syn_PhotoToStrBase64(ref char[] cBase64, ref int iLen, ref char[] cPhotoName);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_StrBase64ToPhoto")]public static extern int Syn_StrBase64ToPhoto(ref char[] cBase64, int iLen, ref char[] cPhotoName);////				设置附加功能函数/////// <summary>/// 设置照片文件存储的路径/// </summary>/// <param name="iOption">[in] 整形,0=C:根目录,	1=当前路径	,2=指定路径</param>/// <param name="cPhotoPath">[in] 字符指针。路径名</param>/// <returns></returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SetPhotoPath")]public static extern int Syn_SetPhotoPath(int iOption, ref byte[] cPhotoPath);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SetPhotoType")]public static extern int Syn_SetPhotoType(int iType);/// <summary>/// 设置照片文件的文件名/// </summary>/// <param name="iType">[in]整形。0=tmp,1=姓名,2=身份证号,3=姓名_身份证号</param>/// <returns>0成功,-1失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SetPhotoName")]public static extern int Syn_SetPhotoName(int iType);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SetPhotoNameEx")]public static extern int Syn_SetPhotoNameEx(int iType, ref char[] cPhotoname);/// <summary>/// 设置返回性别的格式/// </summary>/// <param name="iType">[in] 整形。0=卡内存储的数据, 1=解释之后的数据</param>/// <returns>0成功,-1失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SetSexType")]public static extern int Syn_SetSexType(int iType);/// <summary>/// 设置返回民族的格式/// </summary>/// <param name="iType">[in]整形。0=卡内存储的数据,1=解释之后的数据,2=解释之后+“族”</param>/// <returns>0成功,-1失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SetNationType")]public static extern int Syn_SetNationType(int iType);/// <summary>/// 设置返回出生日期的格式/// </summary>/// <param name="iType">in] 整形。0=YYYYMMDD,1=YYYY年MM月DD日,2=YYYY.MM.DD,3=YYYY-MM-DD,4=YYYY/MM/DD</param>/// <returns>0成功,-1失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SetBornType")]public static extern int Syn_SetBornType(int iType);/// <summary>/// 设置返回有效期开始日期的格式/// </summary>/// <param name="iType">[in] 整形。0=YYYYMMDD,1=YYYY年MM月DD日,2=YYYY.MM.DD,3=YYYY-MM-DD,4=YYYY/MM/DD</param>/// <returns>0成功,-1失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SetUserLifeBType")]public static extern int Syn_SetUserLifeBType(int iType);/// <summary>/// 设置返回有效期结束日期的格式/// </summary>/// <param name="iType">[in] 整形。0=YYYYMMDD,1=YYYY年MM月DD日,2=YYYY.MM.DD,3=YYYY-MM-DD,4=YYYY/MM/DD</param>/// <param name="iOption">[in] 整形。0=长期不转换   1=长期转换为 有效期开始加50年</param>/// <returns>0成功,-1失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SetUserLifeEType")]public static extern int Syn_SetUserLifeEType(int iType, int iOption);////				USBHID函数/////// <summary>/// 复位M1卡片,返回M1卡片的卡号和卡类型/// </summary>/// <param name="iPort">[in]整形,读卡器的端口号,可以使用Syn_FindReader获得</param>/// <param name="pdwCardSN">[out]无符号四字节,返回M1卡片卡号</param>/// <param name="pbSize">[out] 无符号字节数组,返回M1卡卡类型</param>/// <returns>0成功,其他失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDM1Reset")]public static extern int Syn_USBHIDM1Reset(int iPort, ref UInt32 pdwCardSN, ref byte pbSize);/// <summary>/// 用密钥验证M1卡/// </summary>/// <param name="iPort">[in]整形,读卡器的端口号,可以使用Syn_FindReader获得</param>/// <param name="KeyType">[in]无符号字节,验证类型,0—密钥A验证 1—密钥B验证</param>/// <param name="BlockNo">[in]无符号字节,M1卡块号</param>/// <param name="pKey">[in]无符号字节数组,6字节,密钥数组</param>/// <returns>0成功,128失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDM1AuthenKey")]public static extern int Syn_USBHIDM1AuthenKey(int iPort, byte KeyType, byte BlockNo, byte[] pKey);/// <summary>/// 读M1卡/// </summary>/// <param name="iPort">[in]整形,读卡器的端口号,可以使用Syn_FindReader获得</param>/// <param name="BlockNo">[in]无符号字节,M1卡块号</param>/// <param name="pBlock">[out]无符号字节数组,16字节,读取的数据</param>/// <returns>0成功,其他失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDM1ReadBlock")]public static extern int Syn_USBHIDM1ReadBlock(int iPort, byte BlockNo, byte[] pBlock);/// <summary>/// 写M1卡/// </summary>/// <param name="iPort">[in]整形,读卡器的端口号,可以使用Syn_FindReader获得</param>/// <param name="BlockNo">[in]无符号字节,M1卡块号</param>/// <param name="pBlock">[in]无符号字节数组,16字节,读取的数据</param>/// <returns>0成功</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDM1WriteBlock")]public static extern int Syn_USBHIDM1WriteBlock(int iPort, byte BlockNo, byte[] pBlock);/// <summary>/// 挂起M1卡/// </summary>/// <param name="iPort">[in]整形,读卡器的端口号,可以使用Syn_FindReader获得</param>/// <returns>0成功</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDM1Halt")]public static extern int Syn_USBHIDM1Halt(int iPort);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDReadFactoryInfo")]public static extern int Syn_USBHIDReadFactoryInfo(int iPort, ref byte pFactory, ref byte pVol, ref byte pSerialNo, ref byte pReserved);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDWriteFactoryInfo")]public static extern int Syn_USBHIDWriteFactoryInfo(int iPort, ref byte pFactory, ref byte pVol, ref byte pSerialNo, ref byte pReserved);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDReadUserInfo")]public static extern int Syn_USBHIDReadUserInfo(int iPort, ref byte pInfo);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDWriteUserInfo")]public static extern int Syn_USBHIDWriteUserInfo(int iPort, ref byte pInfo);/// <summary>/// 获得读卡器支持的最大通讯字节数和版本/// </summary>/// <param name="iPort">[in]整形,读卡器的端口号,可以使用Syn_FindReader获得</param>/// <param name="pSAMMaxByte">[out]无符号字节,读卡器支持的最大通讯字节数</param>/// <param name="pARMVol">[out]无符号字节数组,版本号</param>/// <returns></returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDGetMaxByte")]public static extern int Syn_USBHIDGetMaxByte(int iPort, ref byte pSAMMaxByte, ref byte pARMVol);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDSendSound")]public static extern int Syn_USBHIDSendSound(int iPort,  byte ucSound);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDControlLED")]public static extern int Syn_USBHIDControlLED(int iPort, byte ucLed);/// <summary>/// 控制蜂鸣器命令(仅A16D-HF)/// </summary>/// <param name="iPort">[in]整形,读卡器的端口号,可以使用Syn_FindReader获得</param>/// <param name="ucType">[in]无符号整形,命令,暂定为0X04</param>/// <param name="usTime"> [in]整形,蜂鸣器响时间,毫秒计算</param>/// <returns>0成功</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDControlBeep")]public static extern int Syn_USBHIDControlBeep(int iPort, byte ucType, int usTime);/// <summary>/// 读取二代证ID号(仅A16D-HF)/// </summary>/// <param name="iPort"> [in]整形,读卡器的端口号,可以使用Syn_FindReader获得</param>/// <param name="pdwCardSN"> [out] 无符号字节数组,长度8字节</param>/// <returns>0成功,128失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDGetSecCardID")]public static extern int Syn_USBHIDGetSecCardID(int iPort, byte[] pdwCardSN);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDSIMpowerOn")]public static extern int Syn_USBHIDSIMpowerOn(int iPort, ref byte ucATR,ref byte ucLen);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDSIMpowerOff")]public static extern int Syn_USBHIDSIMpowerOff(int iPort);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDSIMAPDU")]public static extern int Syn_USBHIDSIMAPDU(int iPort, int slen, ref byte datasend, ref int rlen, ref byte datareceive);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDSetUserIDCode")]public static extern int Syn_USBHIDSetUserIDCode(int iPort, ref byte code, int len);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDSetUserIDCode")]public static extern int Syn_USBHIDWriteUserMac(int iPort, ref byte pMac);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDIsEncryptMode")]public static extern int Syn_USBHIDIsEncryptMode(int iPort);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_USBHIDIsEncryptMode")]public static extern int Syn_USBHIDdoUpdate(int iPort, ref byte updateBuffer, int bufferLen, int progressCallback);////				串口操作M1卡函数////[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SerialFindReader")]public static extern int Syn_SerialFindReader(int iPort, ref int badurate);/// <summary>/// 打开串口/// </summary>/// <param name="iPort">串口号(1-16)</param>/// <param name="badurate">波特率(可使用Syn_GetCOMBaud获得)</param>/// <returns>0成功,其他失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SerialOpen")]public static extern int Syn_SerialOpen(int iPort, int badurate);/// <summary>/// 关闭串口/// </summary>/// <param name="iPort">串口号(1-16)</param>/// <returns></returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SerialClose")]public static extern int Syn_SerialClose(int iPort);/// <summary>/// 复位M1卡片,返回M1卡片的卡号和卡类型/// </summary>/// <param name="iPort">[in]整形,读卡器的端口号,可以使用Syn_FindReader获得</param>/// <param name="pdwCardSN">[out]无符号四字节,返回M1卡片卡号</param>/// <param name="pbSize">[out] 无符号字节数组,返回M1卡卡类型</param>/// <returns>0成功,其他失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SerialM1Reset")]public static extern int Syn_SerialM1Reset(int iPort, ref UInt32 pdwCardSN, ref byte pbSize);/// <summary>/// 用密钥验证M1卡/// </summary>/// <param name="iPort">[in]整形,读卡器的串口号(1-16),可以使用Syn_FindReader获得</param>/// <param name="KeyType">[in]无符号字节,验证类型,0—密钥A验证 1—密钥B验证</param>/// <param name="BlockNo">[in]无符号字节,M1卡块号</param>/// <param name="pKey">[in]无符号字节数组,6字节,密钥数组</param>/// <returns>0成功,128失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SerialM1AuthenKey")]public static extern int Syn_SerialM1AuthenKey(int iPort,byte KeyType, byte BlockNo, byte[] pKey);/// <summary>/// 读M1卡/// </summary>/// <param name="iPort">[in]整形,读卡器的端口号,可以使用Syn_FindReader获得</param>/// <param name="BlockNo">[in]无符号字节,M1卡块号</param>/// <param name="pBlock">[out]无符号字节数组,16字节,读取的数据</param>/// <returns>0成功,其他失败</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SerialM1ReadBlock")]public static extern int Syn_SerialM1ReadBlock(int iPort, byte BlockNo, byte[] pBlock);/// <summary>/// 写M1卡/// </summary>/// <param name="iPort">[in]整形,读卡器的端口号,可以使用Syn_FindReader获得</param>/// <param name="BlockNo">[in]无符号字节,M1卡块号</param>/// <param name="pBlock">[in]无符号字节数组,16字节,读取的数据</param>/// <returns>0成功</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SerialM1WriteBlock")]public static extern int Syn_SerialM1WriteBlock(int iPort, byte BlockNo, byte[] pBlock);/// <summary>/// 挂起M1卡/// </summary>/// <param name="iPort">[in]整形,读卡器的端口号,可以使用Syn_FindReader获得</param>/// <returns>0成功</returns>[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_SerialM1Halt")]public static extern int Syn_SerialM1Halt(int iPort);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_StartFindCPUCard")]public static extern int Syn_StartFindCPUCard(int iPort, byte[] ATS, ref int rlen);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_StartRemoveCPUCard")]public static extern int Syn_StartRemoveCPUCard(int iPort, byte[] ATS);[DllImport("SynIDCardAPI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, EntryPoint = "Syn_PCTOCPUCard")]public static extern int Syn_PCTOCPUCard(int iPort, int slen, byte[] datasend, ref int rlen, byte[] datareceive);/// <summary>/// 寻找USB读卡器/// </summary>/// <returns></returns>public static int findUSBDriverDevice(){int nRet;for (int i = 1001; i < 1017; i++){nRet = ReadCardAPI.Syn_OpenPort(i);if (nRet == 0){nRet = ReadCardAPI.Syn_GetSAMStatus(i, 0);if (nRet == 0){ReadCardAPI.Syn_ClosePort(i);return i;}ReadCardAPI.Syn_ClosePort(i);}}return 0;}/// <summary>/// 寻找USBHID读卡器/// </summary>/// <returns></returns>public static int findUSBHIDDevice(){int nRet;nRet = Syn_OpenPort(9999);if (nRet == 0){Syn_ClosePort(9999);return 9999;}return 0;}/// <summary>/// 寻找串口读卡器/// </summary>/// <returns></returns>public static int findSerialDevice(){int nRet = 0;int m_iBaud = 0;for (int k = 1; k < 50; k++){nRet = Syn_SerialFindReader(k, ref m_iBaud);if (nRet == 0){return k;}}for (int j = 1; j < 17; j++){nRet = Syn_GetCOMBaud(j, ref m_iBaud);if (nRet == 0){nRet = Syn_SetCOMBaud(j, m_iBaud, m_iBaud);if (nRet == 0){Syn_ClosePort(j);return j;}Syn_ClosePort(j);}}return 0;}}#region 结构体//[StructLayout(LayoutKind.Sequential)][StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]public struct IDCardData{[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]   //ByValTStr           ByValArray     CertVolpublic string Name;      //姓名   [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]public string Sex;       //性别[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]public string Nation;    //民族[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)]public string Born;      //出生日期[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 72)]public string Address;   //住址[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 38)]public string IDCardNo;  //身份证号[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]public string GrantDept; //发证机关[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)]public string UserLifeBegin; // 有效开始日期[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)]public string UserLifeEnd;   // 有效截止日期[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]public string PassID;        //通行证号码[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]public string IssuesTimes;   //签发次数[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 12)]public string reserved;      // 保留[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]public string PhotoFileName;// 照片路径   [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]public string CardType;// 证件类型     [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 122)]public string EngName;// 英文名      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]public string CertVol;// 证件版本号                }#endregion}

相关文章:

新中新身份证阅读器驱动下载sdk DKQ-A16D

读取操作 int nRet;string sMsg "";IDCardData idcardData new IDCardData();byte[] ctmp new byte[255];ReadCardAPI.Syn_SetPhotoPath(1, ref ctmp);setupDataFormate(1);nRet ReadCardAPI.Syn_OpenPort(Main_Form.m_iPort);if (nRet 0){DateTime startTime …...

世界坐标系,相机坐标系,像素坐标系转换 详细说明(附代码)

几个坐标系介绍&#xff0c;相机内外参的回顾参考此文。 本文主要说明如何在几个坐标系之间转换。 本文涉及&#xff1a; 使用相机内参 在 像素坐标系 和 相机坐标系 之间转换。使用相机外参&#xff08;位姿&#xff09;在相机坐标系 和 世界坐标系 之间转换。(qw,qx,qy,qz,…...

计算机毕业设计 基于SpringBoot的企业内部网络管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

CISP模拟试题(三)

免责声明 文章仅做经验分享用途,利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!!! 1. 人们对信息安全的认识从信息技术安全发展到信息安全保障,主要是由于: A.为了更好地完成组…...

前端调取摄像头并实现拍照功能

前言 最近接到的一个需求十分有意思&#xff0c;设计整体实现了前端仿 微信扫一扫 的功能。整理了一下思路&#xff0c;做一个分享。 tips: 如果想要实现完整扫一扫的功能&#xff0c;你需要掌握一些前置知识&#xff0c;这次我们先讲如何实现拍照并且保存的功能。 一. wind…...

android —— 阴影效果和跑马灯效果Textview

1、带阴影的TextView ①、 android:shadowColor“color/black” 设置阴影颜色&#xff0c;需要与shadowRadius一起使用 ②、android:shadowRadius“3.0” 设置阴影模糊程度&#xff0c;设为0.1会变成字体颜色&#xff0c;建议设置3.0 ③、android:shadowDx“10” 设置阴影在水…...

多态语法详解

多态语法详解 一&#xff1a;概念1&#xff1a;多态实现条件 二:重写&#xff1a;三&#xff1a;向上转型和向下转型1:向上转型&#xff1a;1&#xff1a;直接赋值&#xff1a;2&#xff1a;方法传参3&#xff1a;返回值 2:向下转型 一&#xff1a;概念 1&#xff1a;同一个引…...

Python大数据之linux学习总结——day11_ZooKeeper

ZooKeeper ZK概述 ZooKeeper概念: Zookeeper是一个分布式协调服务的开源框架。本质上是一个分布式的小文件存储系统 ZooKeeper作用: 主要用来解决分布式集群中应用系统的一致性问题。 ZooKeeper结构: 采用树形层次结构&#xff0c;ZooKeeper树中的每个节点被称为—Znode。且树…...

C语言——函数的嵌套调用

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>void new_line() {printf("Hello\n"); }void three_line() {int i0;for(i0;i<3;i){new_line();} }int main() {three_line();return 0; }...

4种经典的限流算法与集群限流

0、基础知识 1000毫秒内&#xff0c;允许2个请求&#xff0c;其他请求全部拒绝。 不拒绝就可能往db打请求&#xff0c;把db干爆~ interval 1000 rate 2&#xff1b; 一、固定窗口限流 固定窗口限流算法&#xff08;Fixed Window Rate Limiting Algorithm&#xff09;是…...

网工内推 | 国企、港企网工,年底双薪,NA以上认证即可

01 中航期货有限公司 招聘岗位&#xff1a;信息技术部-网络工程师 职责描述&#xff1a; 1、负责总部、分支机构、外联单位网络的日常运维、故障和应急处置&#xff0c;特别是定期监测设备的运行状态&#xff0c;对存在隐患的地方及时发现改正&#xff0c;保持网络稳定通畅&am…...

【华为HCIP | 华为数通工程师】刷题日记1116(一个字惨)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…...

​软考-高级-系统架构设计师教程(清华第2版)【第7章 系统架构设计基础知识(263~285)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第7章 系统架构设计基础知识&#xff08;263~285&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图...

⑩⑥ 【MySQL】详解 触发器TRIGGER,协助 确保数据的完整性,日志记录,数据校验等操作。

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 触发器 ⑩⑥ 【MySQL】触发器详解1. 什么是触发…...

数据结构与算法编程题3

长度为n的顺序表&#xff0c;删除线性表所有值为x的元素&#xff0c;使得时间复杂度为O(n)&#xff0c;空间复杂度为O(1) #include <iostream> using namespace std;typedef int ElemType; #define Maxsize 100 #define OK 1 #define ERROR 0 typedef struct SqList {E…...

Go基础面经大全(持续补充中)

Go基础 1. 基础特性 Go的优势 天生支持并发&#xff0c;性能高。 单一的标准代码格式&#xff0c;比其他语言更具可读性。 自动垃圾收集机制比Java和Python更有效&#xff0c;因为它与程序同时执行。 Go数据类型 int, string, float, bool, array, slice, map, channel, p…...

uniapp heckbox-group实现多选

文章目录 html 代码JS 代码 混了业务逻辑&#xff0c;谨慎观看 html 代码 <view><!--可滚动视图区域。用于区域滚动 --><scroll-view :style"{ height: clientHeight px }" :scroll-top"scrollTop" scroll-y"true"scrolltouppe…...

读懂:“消费报销”模式新零售打法,适用连锁门店加盟的营销方案

读懂&#xff1a;“消费报销”模式新零售打法&#xff0c;适用连锁门店加盟的营销方案 引言&#xff1a;2023年的双十一已经落下帷幕&#xff0c;作为每年的经典电商促销节&#xff0c;今年已是第15个年头&#xff0c;但是今年各大电商平台却都是非常默契的&#xff0c;没有公布…...

一个基本的http客户端

高可用 客户端 1. httpClient.h #include <iostream> #include <string> #include <functional>class HttpClient { public:HttpClient(std::string url) : url_(url), port_(0) {}int write_http(const std::string &method, const std::string &…...

html-网站菜单-点击菜单展开相应的导航栏,加减号可切换

一、效果图 1.点击显示菜单栏&#xff0c;点击x号关闭&#xff1b; 2.点击一级菜单&#xff0c;展开显示二级&#xff0c;并且加号变为减号&#xff1b; 3.点击其他一级导航&#xff0c;自动收起展开的导航。 二、代码实现 <!DOCTYPE html> <html><head>&…...

HTML 等价字符引用:系统化记忆指南

HTML 等价字符引用:系统化记忆指南 在 HTML 中,字符引用(Character Entity References)用于表示保留字符或特殊符号。我将提供一个系统化的方法来记忆这些重要实体,并解释它们的实际应用。 什么是等价字符引用? HTML 字符引用有两种形式: 命名实体:&entity_name…...

pycharm生成图片

文章目录 图片例子生成图片并储存&#xff0c;设置中文字体支持两条线绘制散点图和直方图绘制条形图&#xff08;bar&#xff09;绘制条形图&#xff08;横着的&#xff09;&#xff08;plt.barh&#xff09;分组的条形图 颜色和线条风格1. **颜色字符 (color)**其他颜色指定方…...

Ubuntu 24.04 LTS Chrome 中文输入法(搜狗等)失效?一行命令解决

Ubuntu 24.04 LTS Chrome 中文输入法&#xff08;搜狗等&#xff09;失效&#xff1f;一行命令解决 在 Ubuntu 24.04 LTS 中&#xff0c;如果你发现 Chrome 浏览器用不了搜狗输入法或其他 Fcitx5 中文输入法&#xff0c;可以试试下面的方法。 直接上解决方案&#xff1a; 打…...

uniapp与微信小程序开发平台联调无法打开IDE

经测试属于网络问题。本机需要联网。否则会出现Hbuilder运行微信小程序到模拟器时无法打开 微信开发者工具 这个页面出不来会一直显示异常。这期间微信小程序开发工具的端口是通的 需要先联网...

FFmpeg学习笔记

1. 播放器的架构 2. 播放器的渲染流程 3. ffmpeg下载与安装 3.0 查看PC是否已经安装了ffmpeg ffmpeg 3.1 下载 wget https://ffmpeg.org/releases/ffmpeg-7.0.tar.gz 3.2 解压 tar zxvf ffmpeg-7.0.tar.gz && cd ./ffmpeg-7.0 3.3 查看配置文件 ./configure …...

网络协议入门:TCP/IP五层模型如何实现全球数据传输?

&#x1f50d; 开发者资源导航 &#x1f50d;&#x1f3f7;️ 博客主页&#xff1a; 个人主页&#x1f4da; 专栏订阅&#xff1a; JavaEE全栈专栏 内容&#xff1a; 网络初识什么是网络&#xff1f;关键概念认识协议五元组 协议分层OSI七层模型TCP/IP五层&#xff08;四层&…...

【HW系列】—安全设备介绍(开源蜜罐的安装以及使用指南)

文章目录 蜜罐1. 什么是蜜罐&#xff1f;2. 开源蜜罐搭建与使用3. HFish 开源蜜罐详解安装步骤使用指南关闭方法 总结 蜜罐 1. 什么是蜜罐&#xff1f; 蜜罐&#xff08;Honeypot&#xff09;是一种主动防御技术&#xff0c;通过模拟存在漏洞的系统或服务&#xff08;如数据库…...

css3 新增属性/滤镜效果/裁剪元素/图片适应盒子/定义和使用变量/恢复默认initial

从 CSS3 发布至今&#xff0c;CSS 标准引入了大量新特性&#xff0c;极大地丰富了前端开发的能力。以下是 CSS3 之后的重要新增属性、模块与特性总结&#xff0c;涵盖布局、动画、交互、视觉、选择器、单位等多个领域。 &#x1f3a8; 视觉与效果增强 属性/功能作用示例filte…...

从“固定“到“流动“:移动充电如何重塑用户体验?

在传统充电模式中&#xff0c;"固定"不仅是技术的特征&#xff0c;更成为用户行为的枷锁——人们需要规划行程、寻找插座、等待电量填满&#xff0c;这种被动适配正在被移动充电技术颠覆。当充电设备从墙面解放&#xff0c;化身可携带的能源胶囊&#xff0c;甚至嵌入…...

python学习day34

GPU训练及类的call方法 知识点回归&#xff1a; CPU性能的查看&#xff1a;看架构代际、核心数、线程数GPU性能的查看&#xff1a;看显存、看级别、看架构代际GPU训练的方法&#xff1a;数据和模型移动到GPU device上类的call方法&#xff1a;为什么定义前向传播时可以直接写作…...