Guest User

Untitled

a guest
Nov 15th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4. * This tries to anonymise all letters in a string.
  5. *
  6. * @param string $s
  7. * @return string
  8. */
  9. function anonymize_letters($s) {
  10. $tokens = str_split($s, 1);
  11. $ns = '';
  12. $l = strlen($s);
  13. for ($i = 0; $i < $l; $i++) {
  14. $cp = ord($s[$i]);
  15. if ($cp < 128) {
  16. $offset = null;
  17. $range = null;
  18.  
  19. if ($cp > 64 && $cp < 91) { // roman capital letters
  20. $offset = 65;
  21. $range = 25;
  22. } elseif ($cp > 96 && $cp < 123) { // roman lowercase letters
  23. $offset = 97;
  24. $range = 25;
  25. } elseif ($cp > 47 && $cp < 58) { // numbers
  26. $offset = 48;
  27. $range = 9;
  28. }
  29.  
  30. if ($offset && $range) {
  31. $ns .= chr($offset + \mt_rand(0, $range));
  32. } else {
  33. $ns .= $s[$i];
  34. }
  35. } else { // a non-ASCII, hopefully UTF-8 string
  36. $t = '';
  37. // byte length according to UTF-8 standard
  38. $bl = $cp < 224 ? 2 : ($cp < 240 ? 3 : 4);
  39.  
  40. if ($cp < 224) {
  41. $t = $s[$i] . $s[$i + 1];
  42. $i++;
  43. } elseif ($cp < 240) {
  44. $t = $s[$i] . $s[$i + 1] . $s[$i + 2];
  45. $i += 2;
  46. } else {
  47. $t = $s[$i] . $s[$i + 1] . $s[$i + 2] . $s[$i + 3];
  48. $i += 3;
  49. }
  50.  
  51. if (preg_match('/\p{L}/', $t)) {
  52. $cp = mb_ord($t);
  53. $n = $t;
  54. $j = 0;
  55. do {
  56. $n = mb_chr($cp + (\mt_rand(-10, 10))); // find a letter nearby
  57. $j++;
  58. } while ($j < 10 && (!preg_match('/\p{L}/', $n) || ctype_upper($n) !== ctype_upper($t)));
  59. $ns .= $n;
  60. } else {
  61. $ns .= $t;
  62. }
  63. }
  64. }
  65. return $ns;
  66. }
Add Comment
Please, Sign In to add comment