我正在使用SQL Server数据库,其中我的一个表具有列类型 varchar(max(。在此列中,我正在存储base64字符串。
基本上,应用程序的流量为:
- 获取指纹数据。
- 将其编码到base64字符串中。
-
使用PHP通过检查其存在
将其存储到SQL Server数据库中3a。从数据库中检索所有指纹
3b。使用从数据库中收到的所有指纹插入指纹数据
3C。如果有指纹与之匹配,请返回false 如果任何指纹与之匹配,请返回true
-
如果返回值是正确的,请插入以下查询的指纹,如果为false,则显示错误。
INSERT INTO EMPTABLE ( Finger_Data ) values ( CONVERT( VARCHAR(MAX) , $Finger_Data ) )
要在第3步中查看指纹,使用以下代码。
$sqlString = "SELECT CAST( Finger_Data AS VARCHAR(MAX)) AS FINGER FROM
EMPTABLE ";
$stmt = $this->conn->prepare($sqlString);
$stmt->execute();
$data = $stmt->fetchAll();
if ($stmt->rowCount() > 0) {
if ($data) {
foreach ($data as $row) {
$found = false;
if ($Finger_Data === $row['FINGER']){
echo "n >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Duplicate found <<<<<<<<<<<<<<<<
$found = true;
}
if($found){
echo "n >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Implementing found <<<<<<<<<<<<<<<<
}
}
}
}
在这里我的问题是,我根本无法比较这两个字符串。当我打印这两个变量时,我看到它们80%等于字符串的一部分不匹配。但是,当我直接检查数据库时数据正确显示,这意味着在PHP中阅读或从事项中读写。
您无法在SQL中进行比较,因为只有在一次又一次具有相同的指纹图像时,您才能将其匹配。但实际上,当您获得两次指纹时,两个图像将彼此不同,位置位置变化,角度变化和扫描质量很小。因此,无法进行字符串比较。
所有扫描仪都提供了用于捕获指纹并比较它们(1:1(的SDK,您可以将其用于开发桌面应用程序。如果需要比较服务器上的扫描图像,则需要实现自己的自动手指识别算法,或者必须使用第三方服务,例如
- 凸轮
- m2sys
- 神经技术