首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >击键动力学-飞行时间计算

击键动力学-飞行时间计算
EN

Stack Overflow用户
提问于 2016-12-04 04:15:30
回答 1查看 304关注 0票数 0

我们正在做一个密码认证系统与击键动力学。在注册过程中,我们的系统要求用户输入三次密码,每次输入每个密钥之间的延迟,然后添加它们。所以每次都有三个不同的值,然后我们取三个值的平均值,这是最后的值。如何获取每个键之间的延迟,并将其存储在数组中并计算平均值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-04 05:16:22

在事件中使用timeStamp数据,您可以相对容易地通过计算当前和下一个击键之间的差异来计算平均值(如果存在的话)。从这里,您可以简单地将差异之和按击键总数(减去1)进行平均值。注意:这可能不是有史以来最优雅的解决方案,但它是概念的一个很好的证明。

代码语言:javascript
复制
/**
 * 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;
});
代码语言:javascript
复制
<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>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40955321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档