#JavaScript (ES6), 37 33 36 29 26 18 21 19 bytes
s=>s.slice(1)+ +!+s
-4 bytes thanks to ETHProductions
-7 + -5 + -2 bytes thanks to CalculatorFeline
-3 bytes thanks to Rick Hitchcock
Moves the first character to the end and sets it to 0 if it's numeric and non-zero, and 1 otherwise.
###Explanation
s=> anonymous function with parameter s
+s +s convert s to a number
! ! not (converts to boolean; relevant: 0->true,1->false)
+ convert !+s back to number (true->1, false->0)
s.slice(1)+ prefix the rest of the string
␣ needed to avoid the +s combining
###Proof
Because the second char becomes the first, the third char becomes the second, etc. all chars would have to be identical. The last remaining char can only be a 0 or a 1, so the repeated char would have to be either 0 or 1. But any string of 0s produces a 1 at the end, and vice-versa; therefore, it is impossible to create an input that is equal to its output. -ETHProductions
See edits for former versions and explanations.
f=
s=>s.slice(1)+ +!+s
console.log(f("000"))
console.log(f("111"))
console.log(f("001"))
console.log(f("110"))
console.log(f("~"))
console.log(f("111111111111111111111111111111111111111111111111111"))
console.log(f("Hello world!"))
console.log(f("23"))
console.log(f(" "))
console.log(f("1x"))