Tak na szybko można by np. coś takiego:
const reg = /^(?!.*0.*0)\d{6}$/;
reg.test('123456'); //true
reg.test('1234567'); //false
reg.test('12345'); //false
reg.test('023456'); //true
reg.test('103456'); //true
reg.test('003456'); //false
reg.test('023450'); //false
Sprawdzenie nie jest może super optymalne ale wyraźnie wskazuje warunki zadania, czyli najpierw sprawdzamy, czy w ciągu nie znajdują się czasem co najmniej dwa zera, a następnie określamy, że cały ciąg ma się składać dokłądnie z sześciu cyfr.
Przykład z testowanie w JavaScript ale regexp można zastosować praktycznie wszędzie.
Zastosowanie "(?! ... )" jest tutaj ważne, ponieważ napisałeś:
który może zawierać tylko jedno 0, reszta cyfr dowolna
czyli rozumiem z tego, że PIN może zawierać maksymalnie jedno zero, ale może ono być na dowolnej pozycji - nie napisałeś, że jeśli wystąpi to ma być pierwsze lub ostatnie. To bardzo istotne założenie, jeśli jest inaczej to musisz sprecyzować warunki zadania.