使用 asp.net C# Javascript 通过指纹登录 Asp.net Web 应用程序

2024-02-22

我想使用指纹登录我的 asp.net Web 应用程序。这意味着我不想使用任何登录 ID 和密码。我只想用指纹登录。我有一台 3m cogent 设备,该设备工作正常,但我不知道如何将该设备与我的软件集成。我正在使用 ActiveX。

我的 JavaScript 代码是:

 <script type="text/javascript">

    $(document).ready(function () {
        $('#scan').click(function () {
            $('#dicscan').addClass('scanning');
            setTimeout(function () {
                $('#dicscan').removeClass('scanning');
            }, 20 * 1000);
        });
    });
</script>
<script type="text/javascript">
    function OpenActiveX() {
        var port = document.getElementById("Comport");
        port.Conopen = 1;
        if (port.error > 0) //Display errors if found
            alert(port.ErrorDescription);
    }

    function Matching() {
        var retval = 0;
        var port = document.getElementById("Comport");
        port.Ksserialnumber = 1;
        port.KsCapture = 1;
        port.KsAuthenticationMatch = 1;
        retval = port.KsMatchretvalue;
        if (retval > 0) {
            alert("Two fingers are Matched...");
            window.open('ResultPage.html', '_self');
        }
        else {
            alert("Finger Not Matched...");
        }
        if (port.error > 0) //Display errors if found
            alert(port.ErrorDescription);
     }
</script>

我在 port.KsMatchretvalue 中未定义。


我正在使用 3M Cogent CSD 200 型号指纹读取器设备
希望您已经有 SDK 下面是该设备的一些代码,用于捕获和匹配详细信息以允许登录。
这里有两个功能
1.]捕获-保存指纹
2.] 匹配 - 匹配登录时的指纹
注意:它是我的应用程序中的代码块,您必须根据您的应用程序进行调整

byte[] bTemplateDataOne;
        byte[] bTemplateDataTwo;
        byte[] isoTemplateBytes;
        bool ErroFlag = false;
        int nTempltSizeOne;
        int nTempltSizeTwo;
        MMMCogentCSD200APIs csd200Obj = null;
        CSD200Wrapper wr = null; 
private void btnCapture_Click(object sender, EventArgs e)
    {
        try
        {
            int nRc = -1;
            byte[] fpRawBytes = null;
            int m_Width = 0, m_Height = 0;
            isoTemplateBytes = null;
            int nfiq = 0;

            pictCaptureImg.Image = null;
            pictCaptureImg.Refresh();
            if (true == chkbCaptureOnly.Checked)
            {
                pbClaimed.Image = null;

                pbClaimed.Refresh();

                bTemplateDataOne = null;
                nTempltSizeOne = -1;
                bTemplateDataTwo = null;
                nTempltSizeTwo = -1;
                rbClaimed.Checked = true;


                nRc = csd200Obj.captureFP(30000, ref fpRawBytes, ref m_Width, ref m_Height);
                if (nRc == CSD200APICodes.SUCCESS && fpRawBytes != null)
                {
                    bmp = CreateGreyscaleBitmap(fpRawBytes, m_Width, m_Height);
                    pictCaptureImg.Image = bmp;
                    MessageBox.Show("Fingerprint Capture Successful.");
                }
                else if (nRc == CSD200APICodes.ERROR_TIMEOUT)
                {
                    MessageBox.Show("Fingerprint Capture Timeout");
                }
                else
                {
                    MessageBox.Show("Fingerprint Capture Failed. ErrorCode: " + nRc);
                }
            }
            else
            {
                nRc = csd200Obj.captureFP(30000, ref fpRawBytes, ref m_Width, ref m_Height, ref nfiq, ref isoTemplateBytes);

                if (nRc == CSD200APICodes.SUCCESS && fpRawBytes != null)
                {
                    bmp = CreateGreyscaleBitmap(fpRawBytes, m_Width, m_Height);

                    pictCaptureImg.Image = bmp;

                    if (rbClaimed.Checked == true)
                    {
                        pbClaimed.Image = bmp;
                        if (isoTemplateBytes != null)
                        {
                            bTemplateDataOne = isoTemplateBytes;
                            nTempltSizeOne = isoTemplateBytes.Length;
                        }
                    }
                    else 
                    {
                        MessageBox.Show("Try Again , Some error occured");
                    }
                    MessageBox.Show("Fingerprint Capture Successful.\n NFIQ: " + nfiq);
                }
                else if (nRc == CSD200APICodes.ERROR_TIMEOUT)
                {
                    MessageBox.Show("Fingerprint Capture Timeout");
                }
                else
                {
                    MessageBox.Show("Fingerprint Capture Failed. ErrorCode: " + nRc);
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }   
private void btnMatch_Click(object sender, EventArgs e)
    {

        if (bTemplateDataOne != null )
        {
            //DataTable dt = new DataTable();
            //dt.Columns.Add("value");
            //for (int i = 0; i < bTemplateDataOne.Length; i++)
            //{
            //    DataRow dr = dt.NewRow();
            //    dr["value"] = bTemplateDataOne[i];
            //    dt.Rows.Add(dr);
            //}
            bool isMatch = false;
            int matched = 0;
            int index = 0; ;
            string strAppPath = Path.GetDirectoryName(Application.ExecutablePath);
            try
            {
                string result1 = Convert.ToBase64String(bTemplateDataOne, 0, bTemplateDataOne.Length);

                string connectionstring = ConfigurationManager.ConnectionStrings["Constr"].ConnectionString.ToString();
                SqlConnection con = new SqlConnection(connectionstring);
                con.Open();
                SqlCommand cmd = new SqlCommand("select Biometric,Name,id from Details ", con);
                DataSet ds = new DataSet();
                SqlDataAdapter ad = new SqlDataAdapter(cmd);
                ad.Fill(ds);
                con.Close();

                if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        bTemplateDataTwo = null;
                        bTemplateDataTwo = Convert.FromBase64String(ds.Tables[0].Rows[i][0].ToString());
                        nTempltSizeTwo = bTemplateDataTwo.Length;

                        //DataTable dt1 = new DataTable();
                        //dt1.Columns.Add("value");
                        //for (int ii = 0; ii < bTemplateDataTwo.Length; ii++)
                        //{
                        //    DataRow dr = dt1.NewRow();
                        //    dr["value"] = bTemplateDataTwo[ii];
                        //    dt1.Rows.Add(dr);
                        //}

                        isMatch = csd200Obj.matchTemplates(bTemplateDataOne, bTemplateDataTwo);
                        if (isMatch == true)
                        {
                            index = i;
                            matched++;
                        }

                    }

                    if (matched > 0)
                    {
                        string msg = "Fingers are Matched." + Environment.NewLine;
                        msg += "Welcome: " + ds.Tables[0].Rows[index]["Name"];
                        msg +="( id : " + ds.Tables[0].Rows[index]["id"] + ")" + Environment.NewLine + "matched value : " + matched;
                        MessageBox.Show(msg);
                        WriteFMRFile(nTempltSizeOne, bTemplateDataOne, strAppPath + "\\One.fmr");
                        WriteFMRFile(nTempltSizeTwo, bTemplateDataTwo, strAppPath + "\\Two.fmr");
                    }
                    else
                    {
                        MessageBox.Show("Not Matched." + Environment.NewLine + "matched value : " + matched);
                    }
                }
                else
                {
                    MessageBox.Show("There is no fingerprint saved in the system"+Environment.NewLine+"Register someone first .");
                }
            }
            catch (BioSDK710Exception cgtEx)
            {
                MessageBox.Show(cgtEx.ShowError(), "CogentBioSDK710 Error");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        //else if(chkbCaptureOnly.Checked == true && (bTemplateDataOne == null || bTemplateDataTwo == null))
        else if (chkbCaptureOnly.Checked == true && (bTemplateDataOne == null))
        {
            MessageBox.Show("Please uncheck 'Capture Only' and recapture.", "Warning");
        }
        //else if (chkbCaptureOnly.Checked == false && (bTemplateDataOne == null || bTemplateDataTwo == null))
        else if (chkbCaptureOnly.Checked == false && (bTemplateDataOne == null))
        {
            MessageBox.Show("Please capture fingerprints.", "Warning");
        }

    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 asp.net C# Javascript 通过指纹登录 Asp.net Web 应用程序 的相关文章

随机推荐

  • firestore 权限缺失或不足

    我收到错误 Firebase 缺少或权限不足 代码 const demoCollectionRef this db collection items 返回 demoCollectionRef add item 我认为这个错误是由于 angu
  • Android Studio 3.0.1 上的 Gradle 项目同步失败

    我是第一次在笔记本电脑上安装 Android Studio 3 0 1 但无法创建我的第一个 Hello World 应用程序 我收到以下错误 Create process failed error 216 Error Consult yo
  • div 下面仍然触发 click 事件

    这是我正在构建的 PhoneGap 应用程序 我正在我的笔记本电脑上进行测试 然后使用 PhoneGap cli 在 iPhone 上进行测试 我有一个 openlayers 3 地图 上面记录了点击事件 我还有一个 div 当菜单显示时
  • 在 Android 中显示撰写短信视图

    我想用 Android 发送短信 发送短信的目的是什么 我想显示撰写短信视图 并在消息字段中传递我的预定义文本 您可以使用以下代码 startActivity new Intent Intent ACTION VIEW Uri parse
  • 自动从网页中提取提要链接(atom、rss等)[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个巨大的 URL 列表 我的任务是将它们提供给一个 python 脚本 该脚本应该吐出提要 UR
  • Android:当软输入键盘出现时,Recyclerview 不会调整大小

    我有一个包含片段的活动 并且该片段包含自定义视图 自定义视图包含一个编辑文本 其正下方是一个高度为 match parent 的回收视图 当用户将焦点放在编辑文本上时 会出现一个软输入键盘 不幸的是 该键盘隐藏了其下方一半的回收视图 我希望
  • 如何从mysql表中获取自增字段名或主键字段名?

    在PHP中 如何获取已设置为在添加新记录时自动递增的字段的字段名称 在大多数情况下 它与表的 PRIMARY KEY 相同 但不一定总是如此 所以这个问题有两部分 第二部分分支为第三部分 1 如何获取自增字段名称 2 如何获取primary
  • Android Gradle 支持库必须使用相同版本

    我已经查看了所有其他问题并用谷歌搜索了不可能的问题 但我找不到使用正确依赖项的方法 下面是我的应用程序 Gradle 构建文件 buildscript repositories google jcenter dependencies cla
  • 从解决方案中删除 TFS 连接

    如何将解决方案制作为干净副本而不映射到 TFS 问题是当我尝试打开它时会显示此消息 我想在没有 TFS 连接的情况下正常打开它 要完全删除 TFS 源代码管理绑定 请执行以下两个步骤 转到解决方案的文件夹 查找并删除所有文件 vssscc
  • 由于 libssl 依赖,`apt-get install librdkafka1` 在 Debian 9.x 上失败

    Basic apt get install librdkafka1在 Debian 8 x 上工作 但在 Debian 9 x 上失败 这看起来像是关于 libssl 的依赖版本问题 Debian 8 x 有 libssl1 0 0 Deb
  • 为什么需要 islower() 及其朋友来处理 EOF?

    Why are islower 以及需要处理的朋友EOF 然而putchar 朋友们不需要吗 为什么不是islower 治疗int as unsigned char 就像情况一样putchar 这是完全有道理的 因为我们必须检查EOF无论如
  • libstdc++.so.6:找不到版本“GLIBCXX_3.4.20”

    为了将 gt 2GB 的原始读数上传到 Genebank 上的 SRA 我在 ubuntu 16 04 上安装了 aspera connect 插件 但按照基因库 SRA 门户上的说明 该插件并未弹出 当我在本地初始化插件时 我在终端上收到
  • 创建可训练权重的 Keras 层

    edit请参阅底部以了解我如何解决此问题 我写了自己的Keras层 其构建方法如下 class Multed Weights Layer def init self input dim output dim kwargs self outp
  • 位操作:打印下一个最小和最大的具有相同位数的 1 位

    给定一个整数 打印其二进制表示中具有相同数量的 1 位的下一个最小和下一个最大数字 数完数字中1的个数后 如何确定下一个最小的数字 对于下一个高度 您可以使用 Hakmem 175 第 175 项 高斯珀 要获取具有相同数量 1 位的下一个
  • 查找并排序目录

    我需要查找不超过 30 天的目录 然后按日期对它们进行排序 从最新到最旧 这是我的命令 find tmp logs maxdepth 1 mindepth 1 type d mtime 30 问题显然是排序部分 如果只有 几个 目录 您可以
  • SLCOmposeviewcontroller Twitter 共享警报问题

    我一直在使用这个代码来发布推特 SLComposeViewController fbController SLComposeViewController composeViewControllerForServiceType SLServi
  • Bootstrap glyphicon-菜单-汉堡包未显示

    这是明确定义的汉堡菜单引导图标 http getbootstrap com components glyphicons glyphs http getbootstrap com components glyphicons glyphs 如果
  • PHP如何删除最后一个逗号[重复]

    这个问题在这里已经有答案了 输出示例 1 test test test test test 2 test test test 3 test test 4 test 我尝试根据我的使用内爆上一个问题 https stackoverflow c
  • 如何像 GitHub Actions 一样在 CI 中以非交互方式登录 ArgoCD CLI?

    We have 使用 AWS EKS 与 Tekton 的完整设置 https github com jonashackt tekton argocd eks已安装并希望使用 ArgoCD 进行应用程序部署 正如文档所述 https arg
  • 使用 asp.net C# Javascript 通过指纹登录 Asp.net Web 应用程序

    我想使用指纹登录我的 asp net Web 应用程序 这意味着我不想使用任何登录 ID 和密码 我只想用指纹登录 我有一台 3m cogent 设备 该设备工作正常 但我不知道如何将该设备与我的软件集成 我正在使用 ActiveX 我的