Ваши два требования кажутся немного противоречивыми.Если последние 20% массива несущественны (т.е. вы хотите получить тот же результат, если он равен '0plnmjfys' или он нулевой), то почему вы хотите включить его в первую очередь?
Первый шаг - уточнить, что вы хотите устранить неоднозначность.Если это несущественно, просто отбросьте его.
Как только вы решили это, вы должны спросить себя, ожидаете ли вы, что два "близких" результата будут иметь "закрытые" идентификаторы ... то есть, возможно, вы хотите
$unique1 = generate(array('ab034', '981kja7261', '381jkfa0', 'vzcvqdx2993883i3ifja8', '0plnmjfys'));
//now $unique1 == "sqef3452y";
$unique1 = generate(array('ab034', '981kja7261', '381jkfa0', 'vzcvqdx2993883i3ifja8', '0plSsa45'));
//now $unique1 == "sqef3452k";
Последнее сложнее, потому что большинство уникальных генераторов идентификаторов используют хэши (вы также можете посмотреть их), поэтому две очень похожие строки могут возвращать совершенно разные результаты.
Если вы хотите обеспечить уникальность и не хотите, чтобы в ваших результатах была «закрытость», просто вычислите хеш сцепленной строки или хеш для каждой входной строки и объедините хеш-коды.
Если вы хотите присвоить привилегию «близости», вы можете вычислить хэши для наиболее важных частей и применить алгоритм Soundex или что-то подобное для остальных менее важных частей.
Просто запомнитеу вас есть противоречивые требования в этом: уникальные идентификаторы очень стараются дать (дико) разные коды для строк, даже если единственная разница - один символ в 1000-chars строка.
Близость (эта строка «более или менее совпадает» с этой второй строкой) пытается сделать прямо противоположное и, будем надеяться, вернет один и тот же код для двоих: цитирование википедии об алгоритме Soundex:
Используя этот алгоритм, оба «Роберт» и «Руперт» возвращают одну и ту же строку «R163», а «Рубин» возвращает «R150».«Ashcraft» и «Ashcroft» оба дают «A261».
Итак ... что это?Считаете ли вы, что использование хэшей для первых 4 элементов (в вашем примере) и Soundex для наименее значимых 20% в вашем примере работает?
Это может привести (возвращаясь к вашему примеру) к чему-то вроде:
$unique2 = generate(array('ab034', '981kja7261', '381jkfa0', 'vzcvqdx2993883i3ifja8',));
//now $unique2 == "AB67R45-000000";
$unique1 = generate(array('ab034', '981kja7261', '381jkfa0', 'vzcvqdx2993883i3ifja8', '0plSsa45'));
//now $unique2 == "AB67R45-012000";