Сначала выводы, далее, кому интересно, подробный разбор программы(код не изменён,
с моей стороны добавлены только русскоязычные коментарии.)
Итак, вывод - тест является обычным лохотроном с целью завлеч клиентов
"Если же разница очень велика (60% и более), возможно, Вам стоит
обратиться к специалисту." %))) Программа действует по следующему принципу:
при первом посещении абсолютно случайным образом(НИКАК не основываясь на
движениях мышки) выбирает число от 13 до 37 лет
(хотя по идее "грамотнее" выдавать в данном случае от 1-го до 49 наверное...
может програмист забыл где-то на два
умножить... %) А может так и задумано)
и запоминает это число.... а нам каждый раз выдаёт его с поправкой от -1 до +1...
поправка меняется в этих пределах при каждом новом прохождении теста. %) В свете
этого мне понравилась фраза "Если разница достигает 30-35%, во-первых,
попробуйте пройти тестирование ещё раз. Если результат не изменился, обратите
внимание...." Результат ФИЗИЧЕСКИ не может измениться больше чем на 2 единицы,
так как он был запомнен... и изменить его можно только потерев с компа куки %).
Ещё порадовало, что программа обсчёта была, хоть и примитивным образом, защищена
от просмотра %) - это первая строчка
//<meta http-equiv="refresh" content="0; url=about:blank">
, которая должна была переправлять на пустую страницу при открытии этой
страницы в браузере отдельно от страниц теста и интерпретации... такая "защита"
вскрывается очень просто многими способами.
Вот так некоторые психологи дурят народ %)
======================= код, коментарии на русском мои ========================
//<meta http-equiv="refresh" content="0; url=about:blank">
<!--
var i; //счётчик движения мыши... Единственная глобальная переменная %)
function Init() // функция вызывается при загрузки страницы теста
{ // http://jammy.newmail.ru/test/test.htm
i = 0;
endf(); //вызывается функция выставления начальных координат квадратов
return false;
}
function endf() //функция выставления начальных координат квадратов
{
var l = s.offsetLeft - 1;
var t = s.offsetTop - 1;
v0.style.left = l;
v0.style.top = t;
v1.style.left = l +298;
v1.style.top = t;
v2.style.left = l;
v2.style.top = t + 298;
v3.style.left = l + 298;
v3.style.top = t + 298;
v4.style.left = l + 149;
v4.style.top = t + 149;
v5.style.left = l + 149;
v5.style.top = t + 149;
v6.style.left = l + 149;
v6.style.top = t + 149;
v7.style.left = l + 149;
v7.style.top = t + 149;
}
function m() // функция, которая вызывается при каждом движении мыши в левом квадрате
{
if (i == 0) setTimeout("verify()", 20000); //если это первое движение,
//то говорим, что надо выполнить функцию verify() через 20 секунд
if (i == -1) { return false; }
//Дальше идёт простое управление движением квадратов на правом поле...
//вычисляются положения и сдвиги относительно текущего состояния
var l = s.offsetLeft - 1;
var t = s.offsetTop - 1;
var x = window.event.offsetX;
var y = window.event.offsetY;
var x2 = 298 - x;
var y2 = 298 - y;
var x3 = Math.abs(149 - x);
var y3 = Math.abs(149 - y);
var x4 = 298 - x3;
var y4 = 298 - y3;
++i; //увеличиваем счётчик движений на единицу
//дальше двигаются квадраты по вычисленным значениям
v0.style.left = l + x;
v0.style.top = t + y;
v1.style.left = l +x2;
v1.style.top = t + y;
v2.style.left = l + x;
v2.style.top = t + y2;
v3.style.left = l + x2;
v3.style.top = t + y2;
v4.style.left = l + x3;
v4.style.top = t + y3;
v5.style.left = l + x4;
v5.style.top = t + y3;
v6.style.left = l + x3;
v6.style.top = t + y4;
v7.style.left = l + x4;
v7.style.top = t + y4;
return false;
//выходим... как видим, НИКАКАЯ информация кроме счётчика движений мыши не накапливается
}
function verify() //функция, которая вызывается при первом движении над левым квадратом
{
endf(); //квадратики ставятся в начальное положение
if (i < 343) //если подвигали меньше 343 раз, нам говорят что мы
// сделали недостаточное количество телодвижений.. хороший ход
// на повышение "авторитетности" теста.
{
alert("К сожалению, сделанных Вами перемещаний недостаточно для проведения анализа. Пожалуйста, попробуйте ещё раз.")
i = 0;
}
else //иначе говорят что всё ок...
{
alert("Спасибо. Сейчас Вам будут представлен результат методики.")
i = -1;
sset(); //функция установки кукисов... по простому
//говоря нас "запомнили", что мы уже тут были...
//развёрнутая информация ниже
res(); //перенаправление на страницу результатов...
}
}
function res()
{
window.location.href="results.htm"; //после того как запомнили
//тот факт что мы были на этой странице(и больше ничего), нас перенаправляют
//на страницу отображения результатов.... на странице результатов содержимое
//поля "сколько лет" показывается функцией show();
}
function sc(a)
{
var ed = new Date(); //берём текущую дату
ed.setDate(1825 + ed.getDate()); //прибавляем 1825 дней(примерно 5 лет)
document.cookie = "Age=" + a + "; expires=" + ed.toGMTString() + "; ";// запоминаем
//возраст - случайное число 25 +/- 12 лет %)
return a;
}
function sset()
{
var ed = new Date(); //берём текущую дату
ed.setDate(1825 + ed.getDate()); //прибавляем 1825 дней(примерно 5 лет)
document.cookie = "S=T; expires=" + ed.toGMTString() + "; "; //запоминаем...
//а что-же мы запоминаем? А ТОЛЬКО факт того, что мы были на этой странице и
//БОЛЬШЕ ничего... т.е. никаких данных о тестировании не передаётся... да они
//и не собираются(как было замечено выше, кроме того сколько раз мы дёрнули мышь,
//но даже эта информация не передаётся...)
}
function fset(fluct)
{
var ed = new Date(); //берём текущую дату
ed.setDate(1825 + ed.getDate()); //прибавляем 1825 дней(примерно 5 лет)
document.cookie = "S=F; expires=" + ed.toGMTString() + "; "; //теперь
// мы "затёрли" информацию о том что мы были на странице теста информацией что мы были на странице
// интерпретации
document.cookie = "Fluctuation=" + fluct + "; expires=" + ed.toGMTString() + "; "; // и
// попутно запоминаем полученное значение переменной "fluctuation" теперь
// при нажатии кнопки обновить значение возраста в пределах -1 до +1 меняться не будет,
// а изменится только при новом "прохождении" теста на плюс/минус единицу %)
}
function gc()
{
var p = Math.random() - 0.5; // p - случайная величина от -0.5 до +0.5
var zage = 0;
var theta = 0;
var fluctuation = 0;
var needfluct = 1;
var cl = document.cookie.split("; "); //разбиваем куки
for (var i = 0; i < cl.length; ++i)//просматриваем все куки
//(пока запомнили только одну - факт того что мы там были)
{
var n = cl[i].split("=");
if ((unescape(n[0]) == "S") && (unescape(n[1]) == "T"))//если мы были
// на странице прохождения теста, то делаем следующее
{
needfluct = 0; //для чего устанавливаем эту переменную разберёмся далее...
fluctuation = Math.round(2 * (Math.random() - 0.5)); // переменную
//fluctuation выставляем случайным образом от -1 до +1 и округляем до целого
fset(fluctuation); //выставляем кукисы, но другие... поехали к той функции...
}
// если кука, которую мы просматриваем - это запомненное выше в функции
// fset() значение "сдвига"(fluctuation), и нужно сдвинуть на запомненную в fset()
// величину(не новое прохождение теста а нажатие на "обновить"), то переменной
// величины сдвига fluctuation присваеваем старое запомненное значение:
if ((unescape(n[0]) == "Fluctuation") && (needfluct == 1)) fluctuation = Math.round(unescape(n[1]));
// Далее если мы уже один раз "посчитали", сколько ему лет,(об этом дальше)
// то вспоминаем это значение:
if (unescape(n[0]) == "Age") zage = Math.round(unescape(n[1]));
}
if (zage == 0)//если мы не говорили сколько ему лет, то... тут самое интересное %)
{
// находим его возраст как случайную величину в диапазоне 25 +/- 12 лет %))))))
// и запоминаем этот возраст функцией sc(), и прибавляем к нему нашу случайную
// "погрешность" от -1 до +1 (fluctuation) %)))
zage = sc(Math.round(25 + (p * 24))) + fluctuation;
}
else
{
// иначе ничего не запоминаем, так как один раз уже запомнили и сейчас вспомнили,
// просто прибавляем "погрешность" %))
zage += fluctuation;
}
return (zage); //возвращаем найденное значение возраста %)))
}
function show() // функция которая показывает сколько нам лет %))))
{
v.innerText = gc(); вызывается функция просмотра куки и возврата возраста...
// идём к ней
t.style.display = "";
}
//-->