Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как сделать уведомление, что браузер устарел?

Лучший ответ:
<div class="warning-ie"> Ваш браузер устарел!!!</div>.warning-ie{
   font-size:30px;
   width:100%;
   height:100px;
   line-height:100px;
   text-align:center;
   color:#ff0000;
   background:#000;
   display:none;
}
.show{
 display:block;
}if(detectIE()){
  document.querySelector('.warning-ie').classList.add('.show');
}

Худший ответ:
просто предупредите, какие КОНКРЕТНО функциональные части вашего сайта не будут работать на старых браузерах
Вопрос: Как выполнить операцию в заданное точное время?

Лучший ответ:
Если нужна такая точность, то только демоном.upd: Наверное нужно пояснение: Пишешь консольный скрипт с бесконечным циклом который проверяет БД и сравнивает время наступление события с текущим. Если совпадают, то выполняешь. И запускаешь этот скрипт в консоли php /path/to/script/file.php

Худший ответ:
http://pro-pawn.ru/showthread.php?8215-Оптимизация...
Но проблема на самом деле глубже. Допустим есть 50 событий в пределах секунды. Как бы Вы не создали таймер, если он запускает 1 скрипт, то 50-е событие выполнится после 49-го и т.д. А Если это php и асинхронности выполнения нет - то и о погрешности в 2-секунды можно забыть. Даже если таймер срабатывает с точностью до десятой части секунды.
Поэтому, на мой взгляд, php точно не про это. Как бы я его не любил, но Вам вероятно нужно что-то другое.
Либо как писал Lander запускать кучу "демонов", при этом куча должна быть не малая и реально срабатывать чаще, чем минимально необходимый интервал.
Вопрос: Почему из-за flexbox слайдер Owl Carousel выходит за пределы блока?

Лучший ответ:
Кроме display: flex; задайте для .owl-stage еще и flex-wrap: wrap;
Тогда не будет ужимать элементы.

Худший ответ:
"И теперь родительскому элементу добавляем display: flex;.
Внутренние div-ы выстраиваются в ряд (вдоль главной оси) колонками одинаковой высоты, независимо от содержимого."
Вопрос: Где найти информацию по написанию парсера с аутентификацией на python?

Лучший ответ:
Где найти информацию по написанию парсера с аутентификацией на python?
В Google, он как раз для этого.Не один из найденных в Гугле примеров не заработал.
Ну, значит и найденные в других местах с большой вероятностью не заработают. Попробуйте разобраться почему они не работают. А потом приходите с конкретной технической проблемой на Тостер.

Худший ответ:
pipenv install requests-htmlRequests-HTML
This library intends to make parsing HTML (e.g. scraping the web) as simple and intuitive as possible.
Вот вам библиотека, там же на странице, есть примеры использования. Удачи вам в парсинге веба.
Вопрос: Как поставить пароль на zip архив через php?

Лучший ответ:
Только через консоль.
Ну по крайней мере я не знаю другого способа на PHP.system('zip -P pass file.zip file.txt');
Где:
pass - пароль
file.zip - имя архива (который будет создан)
file.txt - файл который будет добавлен в архив

Худший ответ:
Начиная с  версии PHP 7.2, пароль можно установить

$zip = new ZipArchive;
$res = $zip->open('filename.zip', ZipArchive::CREATE); //Добавьте имя файла
if ($res === TRUE) {
   $zip->addFromString('ИМЯ_ФАЙЛА_С_РАСШИРЕНИЕМ', 'содержимое файла идет сюда'); //Добавьте имя файла
   $zip->setEncryptionName('ИМЯ_ФАЙЛА_С_РАСШИРЕНИЕМ', ZipArchive::EM_AES_256, 'ПАРОЛЬ'); //Динамическое добавление имени файла и пароля
   $zip->close();
   echo 'Все хорошо';
} else {
   echo 'Ошибка';
}
Вопрос: Chmod -R 777 / или как я убил систему одной командой?

Лучший ответ:
Наймите сдельно девопса, срочно, чтобы не потерять данные

Худший ответ:
Можно переустановить все программы используя apt-get, но это не исправит проблемы с правами в папке /var/lib/, их придется настроить вручную. Кстати если ты просто забекапипишь эту папку потом, все равно, придется мучится с востановлением.
Вопрос: Веб студии просто не выставляют многие работы в портфолио или в свободное время на стройке работают?

Лучший ответ:
Когда я на старте своей карьеры работал в веб-студии (давно было, но не думаю, что что-то кардинально поменялось), сайты клепались пачками, по несколько штук в день. Естественно 90% из них были как под копирку, отличаясь лишь контентом. Смысла выставлять 100500 однотипных сайтов в портфолио просто нет

Худший ответ:
Портфолио как правило вообще никому не нужно, в лучшем случае на старте заполнить примерами работ основных типов.
Нет смысла выкладывать каждый день по однотипному магазину/блогу/лендосу
Вопрос: Nginx + https + django = 404?

Лучший ответ:
У вас триста тыщ путей в разных местах, зачем столько? Все простыни я не осилил, но вангую, что в конфиге нгинкса неправильно составлен локейшен или не настроен путь в proxy_pass, который судя по всему нужен.
Попробуйте для начала отдавать файлы просто из корня.

Худший ответ:
server {
      listen 443;
      server_name batareika.app;
      ssl_certificate ....
      ssl_certificate_key .....
      location = /favicon.ico { access_log off; log_not_found off; }
      location /static/ {
          root /root/Batareika;
          }
          location / {
          include proxy_params;
          proxy_pass http://unix:/run/gunicorn.sock;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          }
}
server {        
   listen 80;
    server_name batareika.app;
    return 301 https://$host$request_uri; 
}
ИМХО примерно так
найди 5 отличий ))
Вопрос: Необязательные аргументы функции Python?

Лучший ответ:
Вот и видно, что по-быстрому. Глава 17 «Области видимости и вложенные функции» и раздел «Типичные ошибки при работе с функциями» в конце. Значение параметра по умолчанию создаётся один раз, при определении функции, а не при каждом её вызове.

Худший ответ:
Вот оно где хранится:print(func.__defaults__)
А про mutable Pavel Denisov разъяснил.
Вопрос: Какие книги стоит почитать по SSL шифрованию данных?

Лучший ответ:
Так вам шифрование и криптографические протоколы или только SSL?
По первому: Брюс Шнайер - Прикладная криптография. Если вообще интересоваться шифрованием, то это главная книга, которую необходимо прочитать. Лучше в оригинале, перевод сделан не специалистами в области с рядом ошибок.
Дальше опционально уже смотреть что именно интересно. Криптология очень обширная наука, на самом деле, и одним шифрованием не ограничивается.

Худший ответ:
Ivan Ristic "Bulletproof SSL and TLS" - одна из лучших книг по теме.
Вопрос: Удаление cookie в php?

Лучший ответ:
А еще лучше, как ставил куку, так ее и удалять, только со знаком минус:setcookie("prev_addr","",time()-3600,"/");

Худший ответ:
В общем может кому пригодится.
Странно. Делал так и раньше - не работало. Спасибо, ребят ;)if (!isset($_COOKIE['prev_addr'])){
    
    setcookie("prev_addr",$_SERVER["HTTP_REFERER"],time()+3600,"/");
}

global $USER;
    if ($USER->IsAuthorized()) {        
        $temp = $_COOKIE['prev_addr'];
        setcookie("prev_addr","",time()-3600,"/");
        //unset($_COOKIE['prev_addr']);
        LocalRedirect($temp);        
    }
Вопрос: Telegram API: Как отправить несколько изображений в одном сообщении?

Лучший ответ:
Теперь telegrap api такое поддерживает. Метод называется sendMediaGroup.
Посмотрите в документации https://core.telegram.org/bots/api#sendmediagroup
Причем можно отправлять смешанные файлы (Фото и видео)

Худший ответ:
Отправит все что в папке temp
TOKEN = "1234646854fdghdfhfghfghssfhhgh"

def send_group_img(chat_id, text):
    temp_files_list = list()
    media = list()
    files = dict()
    for filename in os.listdir("temp"):
        temp_files_list.append(f'{os.getcwd()}\\temp\\{filename}')
    for f in enumerate(temp_files_list):
        files[f"random-name-{f[0]}"] = open(f[1], "rb")
        if f[0] == 0:
            media.append({"type": "photo",
                          "media": f"attach://random-name-{f[0]}",
                          "caption": text}
                         )
        else:
            media.append({"type": "photo",
                          "media": f"attach://random-name-{f[0]}"})
    params = {
        "chat_id": chat_id, "media": str(media).replace("'", '"')}
    request_url = "https://api.telegram.org/bot" + TOKEN + "/sendMediaGroup"
    result = requests.post(request_url, params=params, files=files)
    if result.status_code == 200:
        return True
    else:
        return False
Вопрос: Как можно создать такую анимацию? Точнее с помощью чего?

Лучший ответ:
snippet
Пробуйте, играйтесь с размерами блоков и позиционированием изображения. В большом блоке выглядит сносно, все сочленения все же не совпадают. Тут надо посидеть над формулой и процентами.

Худший ответ:
Много вложенных блоков с skew и смещаете их по X и Y. Анимировать можно через jquery или animate плагин кажется был. Ну а по сути просто по осям перемещаете
Вопрос: Как разделить текстовый файл на части с равным количеством строк?

Лучший ответ:
забудьте про cmd
Powershell гораздо легче дастся вам в освоении.
пример для вашего случая$file = get-content "путь к файлу"
$parts = 4 #количество частей
$lines = [math]::Round($file.Length/$parts) 
for ($i = 0; $i -le $parts; $i++) {
    $file | Select -Skip ($lines*$i/1) -First ($lines*($i+1)/1) | Set-Content -Path "путь к целевой папке\part_$i.txt"
}
Быстро он будет работать только в случае относительно небольших файлов. поскольку файл загружается в память полностью.
Если размер вашего файла идет на гигабайты - можете попробовать адаптировать под вас скрипт
https://stackoverflow.com/questions/1001776/how-ca...
В скрипте есть условие сравнения с размером целевых файлов - вы можете изменить его на условие сравнения с количеством строк в файле

Худший ответ:
Нагромоздили кода вы не меряно, все это можно сделать гораздо компактнее. 
Я не стал разбираться, т.к. реально много кода для такой задачи.
Из вашего описания не ясно как именно разбивать на строки: 
1.брать первые несколько строк и писать в один файл, следующую порцию в другой и т.д. 
2.берем одну строку кладем в первый файл, вторую - во второй и т.д., когда заканчиваются файлы начинаем снова с первого файла.
Пункт 2 реализовывается вообще элементарно в одном цикле чтения и с одним счетчиком файлов.
Пункт 1: нужно сначала подсчитать общее количество строк (можно циклом и счетчиком, а можно поиграть с find /c /v "" <имя файла>, понятно, что find будет работать гораздо быстрее, но не совсем понятно как find будет вести себя с пустыми строками, нужно поэксперименировать) и прикинуть по сколько строк будет приходиться на каждый из файлов. Затем с помощью for /f "skip=X" - читаем файл построчно с пропуском нужного количества строк, и подсчетом скопированных строк. Так же не сильно сложно. Я думаю, после ваших героических усилий вы сможете упростить  ваш код.
Будут вопросы - кидайте сюда.
PS: PowerShell, конечно, гораздо мощнее, но его синтаксис кажется мне страшней, чем у батников, возможно это по тому, что то я язык cmd знаю, а пош до сих пор нет :-)
Вопрос: Арифметические операции в django templates?

Лучший ответ:
Все эти операции не нужно делать в template.

Худший ответ:
Читаем документациюПрименяем прочитанное: {{ x|add:y }}
Вопрос: Один двумерный или два одномерных массива?

Лучший ответ:
Что выбрать?
То, в чём потом не запутаешься. Потому что в массивах ты уже запутался.
Я бы предложил один массив структур с полями для имени, фамилии и отчества.Что лучше выбрать с точки зрения использования памяти и производительности?
Лучше выбрать то, в чём потом не запутаешься. Если будет тормозить -- прогнать через профилировщик и смотреть на результаты профилирования.

Худший ответ:
Массив структур, если это не для обучения, то скорее всего лучшим выбором будет std::vector, он сам будет следить за памятью и расширяться при необходимости. Худший вариант - второй, где указатель на указатель, т.к. кеширование процессора не будет столь эффективным
Вопрос: Как отличить постфиксную форму i++ от префиксной ++i?

Лучший ответ:
i++ - возвращает текущее, а потом увеличивает
++i - увеличивает и возвращаетvar i = 0

console.log(i++) // 0
console.log(i) // 1
console.log(++i) // 2

Худший ответ:
Объяснение
Явно же выделено жирным: Постфиксная форма i++ отличается от префиксной ++i тем, что возвращает старое значение, бывшее до увеличения.
Вопрос: Как в PHP из строки извлечь только ссылку?

Лучший ответ:
Регуляркой, например: https:\/\/[^\s]*
https://regex101.com/r/riu31t/1UPD: правильнее так, чтобы позволить символы только из числа разрешенныхABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=`.
см.  RFC 3986 (Section 2: Characters)https?:\/\/[!#$&-;=?-[\]_a-z~]*

Худший ответ:
Добрый день.
В php есть глобальный массив $_SERVER.
А в этом массиве есть индекс "QUERY_STRING", в котором содержится данные, переданные в адресе после "?"
Есть ещё "HTTP_HOST", в котором содержится имя домена.
Куча всего есть, перейдите по ссылке и посмотрите, что Вы можете извлечь из этого массива.
Просто на нужной странице сделайте print_r($_SERVER) и смотрите, что он Вам отдаёт.
Вопрос: Как найти и обернуть в тег нужное слово?

Лучший ответ:
Вот, блин, никогда не думал, что все так сложно =)<div id="block4ch">
	Нужно здесь подчеркнуть каждое слово <b>подчеркнуть</b>.
</div>
<script>
	var block= document.getElementById('block4ch');
	block.innerHTML= block.innerHTML.replace(/(подчеркнуть)/ig, '<u>$1</u>');
</script>

Худший ответ:
Можно просто библиотеку для markup использовать:
https://github.com/adammark/Markup.js
Пойдет?
Вопрос: Где искать единомышленников?

Лучший ответ:
Очередной мнимый гений с очередной идеей фикс!

Не нужны вы с вашей идеей никому, а особенно людям знающим Swift и машинное обучение. Вместо того чтобы возиться с вами и вашими идеями, они спокойно попивая смузи будут зарабатывать свои $50/час

Худший ответ:
Написал тут большую статью как искать кофаундера разработчика, возможно будет полезно тем, кто наткнется на этот вопрос https://vc.ru/life/300488-kak-nayti-tech-kofaunder...
Вопрос: Visual Composer 4.9.1 -- Wordpress 4.7.2 после обновления не работает?

Лучший ответ:
Текущая версия Visual Composer 5.0.1, ваша проблема - известна разработчикам.
https://codecanyon.net/item/visual-composer-page-b...
Решение обновление плагина до актуальной версии.
Если плагин спиратен, то лезьте в консоль, там светится причина ошибки, можно и разобраться,  но имхо дешевле купить

Худший ответ:
Подкиньте идею
обновить композер, например...
Вопрос: Как реализовать такие «табы»?

Лучший ответ:
<div class="tab-links">
    <ul>
        <li>
	    <a href="#tab1">Tab 1</a>
	</li>
	<li>
            <a href="#tab2">Tab 2</a>
	</li>
    </ul>
</div>
<div class="tab-item-wrapper">
    <div class="tab-item" id="tab1">Content 1</div>
    <div class="tab-item" id="tab2">Content 2</div>
</div>
<div class="tab-links">
    <ul>
        <li>
	    <a href="#tab1">Tab 1</a>
	</li>
	<li>
            <a href="#tab2">Tab 2</a>
	</li>
    </ul>
</div>var tabContainers = $('.tab-item-wrapper .tab-item');

tabContainers.hide().filter(':first').show();
	
$('.tab-links a').click(function () {
	tabContainers.hide();
	tabContainers.filter(this.hash).fadeIn("slow");
	$('.tab-links a').removeClass('selected');
	$(this).addClass('selected');
	return false;
}).filter(':first').click();
Ну стили уже сам допишешь наверное? :-)

Худший ответ:
Пример на css
Вопрос: Несъемная батарея на ноутбуке, можно ли...?

Лучший ответ:
Периодически протирать экран и клавиатуру, желательно спец тряпочкой, не бросать, не бить, не лить жидкости, не бросать грязь,крошки и прочее на него. Перед использованием мыть руки.
А, зарядка? Да какая разница, пользуйтесь как удобно. От того что вы дополнительную неделю жизни выйграйте в течение двух лет особых танцев с бубном - мир лучше не станет.

Худший ответ:
Батарея - расходник
Хорошая прослужит - два-пять лет
Плохая - как повезет
Время службы от вас не зависит никак
У батарейки есть свой контроллер, который не даст вам ее использовать плохо или необдуманно
Вопрос: Как лучше организовать структуру сервера на aws с docker контейнерами?

Лучший ответ:
Имхо - для начала каждую сущность оборачиваем в контейнер, заставляем уметь работать или в единственном экземпляре, или в режиме нескольких инстансов. То есть, к API должен быть какой-то load balancer, веб сервер тоже с несколькими воркерами надо дружить, база тоже по мануалам масштабируется при появлении нескольких контейнеров.
Когда вся система готова масштабироваться, запиливаем потребный для текущей нагрузки сетап. Тут преимущество докера - в легкости миграции с одной машинки на класер: можно начать с одного инстанса где все контейнера крутятся, до вынесения любого компонента на любое количество экземпляров.
Как то так.

Худший ответ:
Зачем Вам докер в принципе при наличии всего 1 инстанса?как можно поступить ещё? 
Вынести базу на отдельный инстанс. Завернуть в докер и апи и сайт. В зависимости от нагрузки, просить/отдавать еще инстансы под докер.
Вопрос: Как установить openssl для android x86?

Лучший ответ:
Недавно компилировал OpenSSL и решал другу такую же проблему.
Вот скомпилированный: dropmefiles.com/wFmXa
https://habrastorage.org/web/f9b/7e4/d0f/f9b7e4d0f...
Если ничего не получится, постучи в Telegram: @exlmoto

Худший ответ:
Я делал вот по этому руководству www.cyberforum.ru/blogs/748276/blog4086.html
Вопрос: Влияют ли картинки на продвижение?

Лучший ответ:
Как было сказано выше все зависит от профиля самого сайта. Сама по себе уникальность картинок это лишь один из факторов ранжирования. Для общего результата нам скорее важна савокупность факторов. Иными словами если мы с ваши разместим статью одной тематики, я у вас возьму картинки, но при этом текст будет лучше написан, более развернуто соответствовать запросу и может поведенческие факторы будут лучше, то даже не смотря на то, что картинки ваши, я с большей вероятностью буду ранжироваться выше.

Худший ответ:
Если сайт в принципе контентный и основу контента составляют грамотно оптимизированные (при прочих равных условиях) изображения - да. 
В остальных случаях все очень спорно.
Вопрос: Нужно ли оформлять ИП несовершеннолетнему для работы на фрилансе в Беларуси?

Лучший ответ:
1) За счетом МОГУТ следить вполне. Как повезет. 
2) Насчет ИП - скорее всего пока нельзя. 
3) В принципе вы можете платить налог как физлицо. Да, это много, увы. 
4) Во всех подобных вопросах советую - сходите на консультацию к юристу, будет намного больше пользы, чем спрашивать на тостере.

Худший ответ:
Доброе утро! Сам из Беларуси, тоже работал на фрилансе.
1) Оформить ИП нельзя в Вашем возрасте
2) Вы можете просто подавать декларацию самостоятельно, как физ лицо и платить налог. Сейчас могу ошибиться, но по-моему было 13%
Вопрос: Почему возвращает window?

Лучший ответ:
в чем тут логика?
Да ни в чём. Один из подводных камней языка. Типа, контекст должен всегда быть объектом, а для null/undefined, в отличие от строк/чисел/bool нет объектных обёрток, поэтому вот такой костыль. В строгом режиме работает как надо:(function() {
  'use strict';
  var func = function() { console.log(this); };
  func.call(null); // выведет null
})();

Худший ответ:
Значение this при вызове без контекста
Вопрос: Как правильно организовать отправку писем?

Лучший ответ:
Если не хотите сами свой почтовый сервер поднимать и прописывать ему всё как надо, включая политики SPF, DMARC и подпись DKIM, то всё разумно.

Худший ответ:
Можно с самого сервера высылать.
Но в принципе схема правильная.
Вопрос: Как в bitrix прервать отправку формы?

Лучший ответ:
пробовали так? 
BX.bind(form, 'submit', function(event){
    var id = sourceEl.value;
    if(id == 20){
       event.preventDefault() ;
       event.stopPropagation();
       alert(id);
     }
});

Худший ответ:
Если в код формы не влезть так просто, то проще поставить disabled для option, который не нужно выбирать, можно еще повесить кастомную валидацию на этот select и если форма отправляется через submit то отправка не будет совершена
Вопрос: CSS Filter: blur(). Как убрать белые края фона?

Лучший ответ:
нет, пока работает так убого, ничего не поделать

Худший ответ:
Если известна ширина и высота.
https://jsfiddle.net/mz31oy33/
С vw и vh можно использовать calc.
Вопрос: Почему так мало реализации адаптивной верстки?

Лучший ответ:
Это невыгодно, технически сложно в реализации?
что за ерунда? все практически современные сайты делаются с учетом адаптивки

Худший ответ:
Их весьма много, очень даже. Зря вы так, да и какой смысл писать одно и тоже идея то одна, да и реализации очень похожи по коду
Вопрос: PHP, сравнение скорости парсеров?

Лучший ответ:
львинная доля времени уходит на загрузку страниц, поэтому и неудивительно что заметной разницы не наблюдается. 
кто ж так парсит? особенно когда нужна скорость. 
сначала готовятся/собираются нужные урлы. 
затем они выкачиваются в много потоков (например, мультикурлом) и складываются в базу или на диск или ещё куда. 
в фоне уже спокойно парсятся документы локально.

Худший ответ:
В общем подскажите может я в чём не прав.
* В том, что тесты нужно запускать много раз, тысячи хотя бы.
* В том, что в измерении времени парсинга вы учитываете время загрузки страницы.
* В том, что вы учитываете время вывода.
* В том, что учитываете время подготовки окружения (инклуды / реквайры).
То, что у вас сейчас получилось - это просто мусорные данные, буквально ничего не значащие.
Вопрос: Как заставить метод падать с исключением?

Лучший ответ:
entity = new T();
Это не смущает ?
Экземпляр объекта создан, переменная не будет null

Худший ответ:
entity = new T();
Это не смущает ?
Экземпляр объекта создан, переменная не будет null
Вопрос: Кто сталкивался со странным багом в PHP при использовании switch case?

Лучший ответ:
Потому что вы перепутали место условия и место значения условия.
Почему с 0 обрабаывает так://В switch пишется условие, результат выполнения которого ищется в case
switch(0) {
    case (0>2)://false, итог: 0==false, ответа да, case сработает
            $userLang = 1;
            break;
}
Почему с 1 вы не заметите://В switch пишется условие, результат выполнения которого ищется в case
switch(1) {
    case (1>2)://false, итог: 1==false, ответа нет, case не сработает
            $userLang = 1;
            break;
}
Почему со значениями больше 2х все хорошо://В switch пишется условие, результат выполнения которого ищется в case
switch(3) {
    case (3>2)://true, итог: 3==true, ответа да, case сработает
            $userLang = 1;
            break;
}
Поэтому никакой это не баг php. Это баг, который написали вы, невнимательно читая документацию.
То что в некоторых случаях работало - это всего лишь стандартные для этого языка манипуляции с типами.

Худший ответ:
php.net/manual/ru/control-structures.switch.phpЗаметьте, что конструкция switch/case использует нестрогое сравнение (==). 
switch это if с оператором сравнения, туда нельзя запихивать условие.
Вопрос: Отвалилась сеть на свежеиспеченном серваке supermicro. Как вернуть все?

Лучший ответ:
Через биос можно мозг IPMI на место поставить.

Худший ответ:
По дефалту ipmi адрес получает по dhcp. Возможно, если вам удастся выяснить есть ли там dhcp сервер, который выдал ip и которой светится вам...
Вопрос: Какой движок для персонального блога выбрать?

Лучший ответ:
Grav CMS - хватит за глаза, удобно, безопасно, высокая скорость работы

Худший ответ:
Я для себя  выбрал Modx+Tickets
Вопрос: Есть ли алгоритмы преобразвоания строки в хеш из цифр длино около 20 символов?

Лучший ответ:
20 цифр это 64 битное число, берете любые биты, можете перемешивать (xor) а там в зависимости от количества значений хеша.

Худший ответ:
Берёшь MD5 или любой другой алгоритм, обрезаешь до 20 символов и заменяешь символы A-F на 0-7.
Коллизий будет тем больше, чем короче хэш и меньше используемых символов. И ничего тут не поделаешь, такова математика