Shuffle string of digits
K (ngn/k), 37 32 bytes

{$[|/x=r:x[,/|2 0N#&lt;x]@&lt;&lt;x;0;r]}


Try it online!

{ } function with argument x

$[ ; ; ] if-then-else

&lt;x "grade" - the sorting permutation for x

&lt;&lt;x "rankings" - the inverse of the sorting permutation

2 0N# split in two halves (or when length is odd - only approximately)

| swap the halves

,/ concatenate

x[ ] use as indices in x

..@&lt;&lt;x use &lt;&lt;x as indices in the previous result (a@b is alternative syntax for a[b])

r: assign to r - the potential result

x=r boolean list of which elements of x are equal to their counterparts in r

|/ or-reduction, i.e. "any?"