2016-12-19 2 views
0

Я использую следующий метод машинописного ввода для генерации UUID. Сам код в основном - это машинописная версия этого stackoverflow answer.Альтернатива побитовым операторам в создании uuid

generateUUID(): string { 
    let date = new Date().getTime(); 
    if (window.performance && typeof window.performance.now === 'function') { 
     date += performance.now(); 
    } 
    let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { 
     let r = (date + Math.random() * 16) % 16 | 0; 
     date = Math.floor(date/16); 
     return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16); 
    }); 
    return uuid; 
}; 

Наша команда разработчиков использует TSLint, чтобы сохранить код в чистоте и у нас есть правило, которое запрещает использовать bitwise operators. Я не знаю, как переписать этот код без ущерба для криптографического аспекта генератора UUID. Как этот код может быть переписан или вообще не имеет смысла?

+3

Почему у вас есть правило, запрещающее побитовые операторы? Это странно. – Pointy

+0

Я думаю, это тоже странно, но это было не мое решение. –

+1

Правило TSLint является ошибкой. Не код – slebetman

ответ

3

Причина, по которой это выделено, заключается в том, что, скорее всего, случайным образом использовать побитовый оператор, например, в выражении if, чем использовать его специально.

Должно быть вполне приемлемым сказать TSLint, что вы действительно предназначены для использования побитового оператора. Просто оберните их специальными комментариями TSLint. :

/* tslint:disable:no-bitwise */ 

// Your code... 

/* tslint:enable:no-bitwise */ 
Смежные вопросы