スポンサーリンク

2つの文字列がどの程度異なっているかを調べる方法としてレーベンシュタイン距離があります。
これは、文字の挿入や削除、置換によって、ある文字列を別の文字列に変形するのに必要な手順の最小回数です。

hogeとhogeはまったく同じなのでレーベンシュタイン距離は0です。
hogeとhoge2は1文字増えてるのでレーベンシュタイン距離は1です。
3hogeとhogeは1文字増えてるのでレーベンシュタイン距離は1です。

PHPには、このレーベンシュタイン距離を計算するための関数
levenshtein()が用意されています。

サンプルコード

<?php
function test_levenshtein($str1, $str2)
{
	$r = levenshtein($str1, $str2);
	echo "[$str1] [$str2] = $r\n";
}

test_levenshtein("hoge","hoge");
test_levenshtein("hoge","hage");
test_levenshtein("hoge","hoge2");
test_levenshtein("1hoge","hoge");
test_levenshtein("oldpasswd","newpasswd");
test_levenshtein("hoge23","hoge45");
test_levenshtein("google.com","google.co.jp");
test_levenshtein("yahoo.com","google.com");
?>

実行結果

[hoge] [hoge] = 0
[hoge] [hage] = 1
[hoge] [hoge2] = 1
[1hoge] [hoge] = 1
[oldpasswd] [newpasswd] = 3
[hoge23] [hoge45] = 2
[google.com] [google.co.jp] = 3
[yahoo.com] [google.com] = 6

レーベンシュタイン距離の小さいものを「もしかして」とサジェスト(提案)してあげる機能を実装するときなどに使えそうです。

あとは、ユーザのパスワードを更新させたいときに、前のパスワードに近いパスワードを許可しないために、前のパスワードと新しいパスワードの比較をするときなどに利用できます。

セキュリティ対策としてよくある、ユーザのIDとパスワードが似通ってるものは許さないようにするという実装をしたいなら、ユーザIDとパスワードの比較をしてレーベンシュタイン距離が近いものは許さないようにしたりするのもいいかもしれません。

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー