passwordStrength.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. (function($){
  2. $.fn.passwordStrength=function(settings){
  3. settings=$.extend({},$.fn.passwordStrength.defaults,settings);
  4. this.each(function(){
  5. var $this=$(this),
  6. scores = 0,
  7. checkingerror=false,
  8. pstrength=$(this).parents("form").find(".passwordStrength");
  9. $this.bind("keyup blur",function(){
  10. scores = $.fn.passwordStrength.ratepasswd($this.val(),settings);
  11. scores>=0 && checkingerror==false && (checkingerror=true);
  12. pstrength.find("span").removeClass("bgStrength");
  13. if(scores < 35 && scores >=0){
  14. pstrength.find("span:first").addClass("bgStrength");
  15. }else if(scores < 60 && scores >=35){
  16. pstrength.find("span:lt(2)").addClass("bgStrength");
  17. }else if(scores >= 60){
  18. pstrength.find("span:lt(3)").addClass("bgStrength");
  19. }
  20. if(checkingerror && ($this.val().length<settings.minLen || $this.val().length>settings.maxLen) ){
  21. settings.showmsg($this,$this.attr("errormsg"),3);
  22. }else if(checkingerror){
  23. settings.showmsg($this,"",2);
  24. }
  25. settings.trigger($this,!(scores>=0));
  26. });
  27. });
  28. }
  29. $.fn.passwordStrength.ratepasswd=function(passwd,config){
  30. //判断密码强度
  31. var len = passwd.length, scores;
  32. if(len >= config.minLen && len <= config.maxLen){
  33. scores = $.fn.passwordStrength.checkStrong(passwd);
  34. }else{
  35. scores = -1;
  36. }
  37. return scores/4*100;
  38. }
  39. //密码强度;
  40. $.fn.passwordStrength.checkStrong=function(content){
  41. var modes = 0, len = content.length;
  42. for(var i = 0;i < len; i++){
  43. modes |= $.fn.passwordStrength.charMode(content.charCodeAt(i));
  44. }
  45. return $.fn.passwordStrength.bitTotal(modes);
  46. }
  47. //字符类型;
  48. $.fn.passwordStrength.charMode=function(content){
  49. if(content >= 48 && content <= 57){ // 0-9
  50. return 1;
  51. }else if(content >= 65 && content <= 90){ // A-Z
  52. return 2;
  53. }else if(content >= 97 && content <= 122){ // a-z
  54. return 4;
  55. }else{ // 其它
  56. return 8;
  57. }
  58. }
  59. //计算出当前密码当中一共有多少种模式;
  60. $.fn.passwordStrength.bitTotal=function(num){
  61. var modes = 0;
  62. for(var i = 0;i < 4;i++){
  63. if(num & 1){modes++;}
  64. num >>>= 1;
  65. }
  66. return modes;
  67. }
  68. $.fn.passwordStrength.defaults={
  69. minLen:0,
  70. maxLen:30,
  71. trigger:$.noop
  72. }
  73. })(jQuery);