Мне в основном нужно приносить информацию от пользователей, использующих биометрию, для этого я использую биометрический считыватель цифрового человека (U.are.U 4500).
Проблема в том, что иногда случается, что информация поступает от другого пользователя, в случае, если я положу палец на считыватель, она читается, и вместо того, чтобы вернуть мои данные, она возвращается от другого пользователя.
Я заметил одну вещь, я сохраняю биометрию в байтовом формате ([байт]). Когда я собираюсь зарегистрировать биометрию, мой байтовый массив обычно состоит из 1000 элементов. Когда я делаю сравнение, байты обычно возвращаются из базы данных, но массив байтов, который я буду использовать для сравнения с базой данных, равен 300. Это может звучать как чушь, но есть ли какие-то помехи? В любом случае, я сделаю источник доступным! Спасибо за вашу помощь.
О мелких деталях байтов, которые я заметил:
Байт в регистре:

байт в чеке:

Я попытался опубликовать изображения здесь, но я был заблокирован переполнением стека:)
Регистрация биометрических:
memoryTemplate = new MemoryStream();
Template.Serialize(memoryTemplate);
memoryTemplate.Position = 0;
brReader = new BinaryReader(memoryTemplate);
serializedTemplate = brReader.ReadBytes((Int32)memoryTemplate.Length);
DALUsuario usuario = new DALUsuario();
//I execute the method to register biometrics
usuario.CadastrarBiometria(Apoio.stCodUsuario, Finger, serializedTemplate);
// usuario.CadastrarBiometria:
con = new SqlConnection();
apoio = new Apoio();
con = apoio.conexaoBD(con);
command = new StringBuilder();
fkMao = VerificarMao(fkDedo);
command.Append("INSERT INTO TBL_BIOMETRIA (FK_USUARIO, FK_DEDO, FK_MAO, BIOMETRIA) ");
command.Append("VALUES (@idUser, @fkDedo, @fkMao, @Biometria)");
cmd = new SqlCommand(command.ToString(), con);
cmd.Parameters.AddWithValue("@IdUser", idUsuario);
cmd.Parameters.AddWithValue("@fkDedo", fkDedo);
cmd.Parameters.AddWithValue("@fkMao", fkMao);
cmd.Parameters.AddWithValue("@Biometria", Template);
cmd.ExecuteNonQuery();
// Проверка биометрии
private void VerificationControl1_OnComplete(object Control, DPFP.FeatureSet FeatureSet, ref DPFP.Gui.EventHandlerStatus EventHandlerStatus) {
DPFP.Verification.Verification ver = new DPFP.Verification.Verification();
DPFP.Verification.Verification.Result res = new DPFP.Verification.Verification.Result();
Usuario user = null;
DALUsuario dalUser = null;
// Compare feature set with all stored templates.
user = new Usuario();
dalUser = new DALUsuario();
// I execute the method that takes the user's biometry and compares it with the one of the database
user = dalUser.RetornaBiometria(FeatureSet);
}
// dalUser.RetornaBiometria:
while (reader.Read()) {
user.iCodUsuario = Convert.ToInt32(reader["FK_USUARIO"]);
user.Biometria = (byte[]) reader["BIOMETRIA"];
memoryStream = new MemoryStream(user.Biometria);
DPFP.Template tmpObj = new DPFP.Template();
tmpObj.DeSerialize(memoryStream);
DPFP.Verification.Verification.Result result = new DPFP.Verification.Verification.Result();
// I MAKE COMPARISON OF THE USER'S BIOMETRY WITH THE BIOMETRIES REGISTERED IN THE DATABASE
ver.Verify(FeatureSet, tmpObj, ref res);
Data.IsFeatureSetMatched = res.Verified;
Data.FalseAcceptRate = res.FARAchieved;
if (res.Verified) {
break; // success
}
fpTemp = null;
}