我们正在做一个密码认证系统与击键动力学。在注册过程中,我们的系统要求用户输入三次密码,每次输入每个密钥之间的延迟,然后添加它们。所以每次都有三个不同的值,然后我们取三个值的平均值,这是最后的值。如何获取每个键之间的延迟,并将其存储在数组中并计算平均值?
发布于 2016-12-04 05:16:22
在事件中使用timeStamp数据,您可以相对容易地通过计算当前和下一个击键之间的差异来计算平均值(如果存在的话)。从这里,您可以简单地将差异之和按击键总数(减去1)进行平均值。注意:这可能不是有史以来最优雅的解决方案,但它是概念的一个很好的证明。
/**
* Log the keypresses
*/
var handler = function(e) {
var inputName = $(this).attr("name");
if (inputName == "password1") handler.data.password1.push(e);
if (inputName == "password2") handler.data.password2.push(e);
if (inputName == "password3") handler.data.password3.push(e);
}
// Init data
handler.data = {};
handler.data.password1 = [];
handler.data.password2 = [];
handler.data.password3 = [];
$(":password").on("keyup", handler);
/**
* Calculate averages
*/
function getAvg(dataInput) {
var sum = 0;
$.each(dataInput, function(index, value) {
if (typeof dataInput[index + 1] != 'undefined') {
sum += (dataInput[index + 1].timeStamp - value.timeStamp);
}
});
return sum / dataInput.length;
}
/**
* Run calculations
*/
$("input[type='submit']").on('click', function(e) {
var pw1 = $("input[name='password1']"),
pw2 = $("input[name='password2']"),
pw3 = $("input[name='password3']");
e.preventDefault();
if (pw1.val().length && pw1.val() == pw2.val() && pw1.val() == pw3.val()) {
var pw1Avg = getAvg(handler.data.password1),
pw2Avg = getAvg(handler.data.password2),
pw3Avg = getAvg(handler.data.password3);
$("#output").html('PW1 Avg between key strokes: ' + Math.round(pw1Avg) + 'ms<br>' +
'PW2 Avg between key strokes: ' + Math.round(pw2Avg) + 'ms<br>' +
'PW3 Avg between key strokes: ' + Math.round(pw3Avg) + 'ms');
// Reset data
$("input[type='password']").val('');
handler.data = {};
handler.data.password1 = [];
handler.data.password2 = [];
handler.data.password3 = [];
} else {
$("#output").html('All passwords must match!');
}
return false;
});<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form method="get">
<p>
<input type="password" name="password1">
</p>
<p>
<input type="password" name="password2">
</p>
<p>
<input type="password" name="password3">
</p>
<p>
<input type="submit">
</p>
</form>
<p id="output"></p>
https://stackoverflow.com/questions/40955321
复制相似问题